Произошло исключение: ошибка mpg123_seek: Недопустимый режим RVA. (код 12)

#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. Я обновил свой код, чтобы он заработал, спасибо!