2014-08-28 46 views
0

我想编写一个程序来确定声音样本的最大值。循环返回所有样本的值,但我无法弄清楚如何打印最大的样本。最大()函数使用从循环python

def largest(): 
f=pickAFile() 
sound=makeSound(f) 
for i in range(1,getLength(sound)): 
    value=getSampleValueAt(sound,i) 
print max([value]) 
+0

请修复您的缩进。 – chepner 2014-08-28 14:21:59

回答

3

尝试:

def largest(): 
    f = pickAFile() 
    sound = makeSound(f) 
    value = [] 
    for i in range(1, getLength(sound)): 
     value.append(getSampleValueAt(sound, i)) 
    print max(value) 

或者

def largest(): 
    f = pickAFile() 
    sound = makeSound(f) 
    print max(getSampleValueAt(sound, i) for i in range(1, getLength(sound))) 

与您的代码,value在每次迭代将被覆盖。如果您使用所有值创建列表,则可以使用max找到最大值。

另见:

+0

这是有效的,但我也试图计算现在正在检索线程死亡的示例中“0”的出现次数。 value.count(“0”)是一个可行的为什么要这样做? – ddbg 2014-08-28 14:30:11

+0

它应该是,但不是整数值,所以你需要'value.count(0)'? – matsjoyce 2014-08-28 14:32:04

0

没有测试它,但也许:

def largest(): 
f=pickAFile() 
sound=makeSound(f) 
value = [ getSampleValueAt(sound,i) for i in range(1,getLength(sound)) ] 
print max(value) 
+0

如果你有几个Msamples呢? – 2014-08-28 14:23:03

+0

@Sylvain Leroux那么我将不得不改变它,但这应该是对主题提供的代码的修复 – Vizjerei 2014-08-28 14:51:58

1

不记得我们在处理音频数据。可能有百万的样本。如果你想坚持高效两个东西在空间和时间,你必须依靠远不如性感:

def largest(): 
    f = pickAFile() 
    sound = makeSound(f) 
    max = getSampleValueAt(sound, 1) # FIX ME: exception (?) if no data 
    idx = 2 
    while idx < getLength(sound): 
     v = getSampleValueAt(sound, i) 
     if v > max: 
      max = v 
     i += 1 

    print max 

发电的解决方案是有效的太的空间内,但速度快,无可以击败Python中一个普通的命令循环。