我需要分析写在.wav文件中的声音.为此,我需要将此文件转换为数字集(例如,数组).我想我需要使用wave包.但是,我不知道它是如何工作的.例如,我做了以下事情:
import wave
w = wave.open('/usr/share/sounds/ekiga/voicemail.wav', 'r')
for i in range(w.getnframes()):
frame = w.readframes(i)
print frame
Run Code Online (Sandbox Code Playgroud)
由于这个代码我希望看到声压作为时间的函数.相反,我看到很多奇怪的,神秘的符号(不是十六进制数字).任何人,请求,帮助我吗?
我正在编写一个使用Python Gstreamer绑定来播放音频的应用程序,但我现在还试图解码音频 - 也就是说,我想使用a读取数据decodebin并接收原始PCM缓冲区.具体来说,我想逐步读取文件的块,而不是将整个文件读入内存.
一些具体问题:如何通过Gstreamer实现这一目标?特别是pygst?是否需要使用特定的"接收器"元素来从流中读取数据?有没有从pygst Buffer对象读取数据的首选方法?如何控制消耗数据的速率(而不仅仅是输入"主循环")?
我一直对此感到好奇,所以我想在这里发帖我可以得到一些好的答案.
到目前为止我所知道的:
人类可以用他们的两只耳朵来获取听起来"听起来像"的声音,以及它们来自哪里.音高是我们听到的音符,类似人声的音高有多种音高(不是纯音).
我想知道的是什么:
我如何编写一个可以知道声音来自何处的程序?从理论的角度来看,我需要两个麦克风,然后我会记录进入麦克风的声音数据并存储音频数据,以便将一瞬间的音频数据放入像[streamA,streamB]这样的元组中.
我觉得可能有一种公式/数学方法可以根据声音的来源进行计算.我也觉得可以获取流数据并训练学习者(给它采样音频并告诉它来自音频的位置)并让它以这种方式对传入的音频进行分类.
这样做的最佳方式是什么?是否有足够的资源可以从中学到更多关于这个主题的知识?
编辑:
例:
Run Code Online (Sandbox Code Playgroud)front左(麦克风)x ======== x(麦克风)对
Run Code Online (Sandbox Code Playgroud)back x (sound source should return "back" or "right" or "back right")
我想写一个程序,它可以返回前/后左/右声音听到的大部分声音.根据我的理解,设置两个指向"前进"的麦克风应该很简单.基于此,我试图找出一种方法,我们可以对声音进行三角测量,并知道与麦克风相关的来源.