【问题标题】:Exception has occurred: error mpg123_seek: Invalid RVA mode. (code 12)发生异常:错误 mpg123_seek:RVA 模式无效。 (代码 12)
【发布时间】:2021-02-15 01:24:58
【问题描述】:

我正在使用 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()

感谢任何帮助。

【问题讨论】:

    标签: python pygame


    【解决方案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。虽然我没有“CABLE Input(VB-Audio Virtual Cable)”设备,但我确实得到了一个很好的静音文件,我用声音编辑程序 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()
    

    【讨论】:

    • 该代码有效,但它旨在通过麦克风播放音频。如果您想测试它,VB-Cable 是一个虚拟音频线,您可以下载:vb-audio.com/Cable
    • 我更新了我的代码以使其正常工作,谢谢!
    猜你喜欢
    • 2022-12-12
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    • 2019-02-10
    • 1970-01-01
    • 2017-05-16
    相关资源
    最近更新 更多