2015-01-23 1 views
4

Я пытаюсь получить данные из wav-файла в Python и построить его. Когда я использую scipy.io.wavfile.read(), я получаю обратно массив, который выглядит следующим образом:Данные, возвращаемые scipy.io.wavfile.read

[[ -1.49836736e-02 -1.27559584e-02] 
[ -1.84625713e-02 -1.63264061e-02] 
[ -2.17888858e-02 -1.95001373e-02] 
..., 
[ 6.10332937e-05 6.10332937e-05] 
[ -3.05166468e-05 0.00000000e+00] 
[ 3.05166468e-05 -6.10332937e-05]] 

Почему куча массивов с длиной 2, в отличие от одного длинного массива со значением на каждый образец? Что представляют собой эти данные? Заранее спасибо.

convert_16_bit = float(2**15) 
sr, samples = scipy.io.wavfile.read('singingonenote.wav') 
x = np.linspace(0, 2000, 0.01) 
samples = samples/(convert_16_bit + 1.0) 
y = samples 
print samples 
plt.plot(x, y) 
plt.show() 
+0

Возможно, стерео; см. http://stackoverflow.com/questions/19888278/read-and-write-stereo-wav-file-with-python-metadatas –

ответ

3

Файл, который вы читаете, кажется, является файлом стерео. Они содержат двумерные данные - один трек для левой и одной дорожки для правого громкоговорителя.

Общее понятие объясняется здесь: https://en.wikipedia.org/wiki/Stereophonic_sound

Если вы хотите выбрать только левый аудиоканал из вашей двумерной последовательности данных, вы можете выбрать его как

y = samples[:,0] 

Чтобы выбрать право канал, замените 0 на 1.

В качестве альтернативы убедитесь, что программа, которую вы используете для создания файла, сохраняет файлы моноволн в первую очередь. В зависимости от того, что вы пытаетесь сделать, это может быть фактическая ошибка.