Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 24, 2013 21:51:31

ALF
Зарегистрирован: 2013-09-24
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Извлечь 2 канала из wav [решено]

Здравствуйте

Есть код переводящий wav в txt, но к сожалению он извлекает только один канал из 2х канального wav файла, объясните, как можно извлечь 2й канал?

import wave
import math
import struct
fileName = "audio.wav"#file to be imported (change this)
#read file and get data
w = wave.open(fileName, 'r')
numframes = w.getnframes()
frame = w.readframes(numframes)#w.getnframes()
frameInt = map(ord, list(frame))#turn into array
#separate left and right channels and merge bytes
frameOneChannel = [0]*numframes#initialize list of one channel of wave
for i in range(numframes):
    frameOneChannel[i] = frameInt[4*i+1]*2**8+frameInt[4*i]#separate channels and store one channel in new list
    if frameOneChannel[i] > 2**15:
        frameOneChannel[i] = (frameOneChannel[i]-2**16)
    elif frameOneChannel[i] == 2**15:
        frameOneChannel[i] = 0
    else:
        frameOneChannel[i] = frameOneChannel[i]
#convert to string
audioStr = ''
for i in range(numframes):
    audioStr += str(frameOneChannel[i])
    audioStr += " "#separate elements with comma
fileName = fileName[:-3]#remove .wav extension
text_file = open(fileName+"txt", "w")
text_file.write("%s"%audioStr)
text_file.close()

Отредактировано ALF (Сен. 25, 2013 21:14:38)

Офлайн

#2 Сен. 25, 2013 00:01:21

ALF
Зарегистрирован: 2013-09-24
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Извлечь 2 канала из wav [решено]

я думаю, что дело в этой строке, она описывает данные для первого канала, но пока я не могу понять, чем будет отличатся фреймы для 2го канала

    frameOneChannel[i] = frameInt[4*i+1]*2**8+frameInt[4*i]

Офлайн

#3 Сен. 25, 2013 00:20:52

ALF
Зарегистрирован: 2013-09-24
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Извлечь 2 канала из wav [решено]

Эта строка пишет 2 канала, но только половину файла, как записать весь файл?

frameOneChannel[i] = frameInt[2*i+1]*2**8+frameInt[2*i]

Офлайн

#4 Сен. 25, 2013 19:27:26

ALF
Зарегистрирован: 2013-09-24
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Извлечь 2 канала из wav [решено]

up

Почему записывается только половина файла, т.е. numframes/2, а не все фреймы, ведь в цикле i до numframes?

Офлайн

#5 Сен. 25, 2013 21:14:11

ALF
Зарегистрирован: 2013-09-24
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Извлечь 2 канала из wav [решено]

Решил, нужно numframes*2 везде, тогда пишет весь файл)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version