#python #pygame
Вопрос:
Я записываю аудио с помощью sounddevice и хочу воспроизвести его через виртуальный аудиокабель через pygame, я продолжаю получать эту ошибку Exception has occurred: error mpg123_seek: Invalid RVA mode. (code 12)
Мой код приведен ниже:
import sounddevice as sd
from scipy.io.wavfile import write
import random
import pygame
import time
pygame.init()
pygame.mixer.init(devicename='CABLE Input (VB-Audio Virtual Cable)')
fs = 44100 # Sample rate
seconds = 00.1 # Duration of recording
def main():
for x in range(10000):
number = random.randint(1,9999999)
myrecording = sd.rec(int(seconds * fs), samplerate=fs, channels=2)
sd.wait() # Wait until recording is finished
write(f'output/output{str(number)}.mp3', fs, myrecording) # Save as WAV file `
# PLAY MIC SOUND HERE
pygame.mixer.music.load(f'output/output{str(number)}.mp3') #Load the mp3
pygame.mixer.music.play() #Play it
time.sleep(00.1)
main()
Любая помощь будет признательна.
Ответ №1:
Есть пара проблем.
Во-первых, scipi.io.wavefile.write()
записывается только несжатый WAV-файл (ссылка: https://docs.scipy.org/doc/scipy/reference/generated/scipy.io.wavfile.write.html ). Вы можете назвать это .mp3
, но это не так сжато.
Следующая проблема заключается в том, что pygame.mixer.music
не .load()
будут распаковываться WAV-файлы. Так что… что делать…
Один из обходных путей-использовать базу pygame.mixer
, которая с удовольствием загружает несжатый WAV. И хотя у меня нет устройства » КАБЕЛЬНЫЙ ввод (виртуальный кабель VB-Audio)», я получаю хороший файл тишины, который я проверил с помощью программы редактирования звука Audacity, и это, кажется, работает нормально.
import sounddevice as sd
from scipy.io.wavfile import write
import pygame
import time
import random
pygame.init()
pygame.mixer.init(devicename='CABLE Input (VB-Audio Virtual Cable)')
fs = 44100 # Sample rate
seconds = 00.1 # Duration of recording
def main():
for x in range(10000):
number = random.randint(1,9999999)
myrecording = sd.rec(int(seconds * fs), samplerate=fs, channels=2)
sd.wait() # Wait until recording is finished
filename = f'output/output{str(number)}.wav'
write(filename, fs, myrecording) # Save as uncompressed WAV file
# PLAY MIC SOUND HERE
print( "Playing [" filename "]" )
#pygame.mixer.music.load(filename) #Load the wav
#pygame.mixer.music.play() #Play it
#while ( pygame.mixer.music.get_busy() ): # wait for the sound to end
# time.sleep(00.1)
sound = pygame.mixer.Sound(filename) #Load the wav
sound.play() #Play it
while ( pygame.mixer.get_busy() ): # wait for the sound to end
time.sleep(00.1)
main()
Комментарии:
1. Код работает, но он предназначен для воспроизведения звука через микрофон. Если вы хотите протестировать его, VB-кабель-это виртуальный аудиокабель, который вы можете скачать: vb-audio.com/Cable
2. Я обновил свой код, чтобы он заработал, спасибо!