ValueError: mmap closed or invalid
ValueError: mmap closed or invalid
我收到错误
ValueError: mmap closed or invalid
每当我尝试播放音频时。似乎是错误的代码是
def speak(audioString):
print(audioString)
tts = gTTS(text=audioString, lang='en')
tts.save("audio.mp3")
with open("audio.mp3") as f:
m = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
pygame.mixer.music.load(m)
pygame.mixer.music.play()
m.close()
我想要帮助,因为我正在尝试执行 textToSpeach 但无法执行。
编辑:将代码空间放在正确的位置
这是因为您在播放声音时关闭了 mmap m
。
def speak(audioString):
print(audioString)
tts = gTTS(text=audioString, lang='en')
tts.save("audio.mp3")
with open("audio.mp3") as f:
m = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
pygame.mixer.music.load(m)
pygame.mixer.music.play()
# wait for audio to finish playing
while ( pygame.mixer.music.get_busy() ):
pygame.event.pump() # <-- a bit dodgey
m.close()
一个快速测试是注释掉 m.close()
使其工作正常。您将需要编写一些其他方式来处理 loading/playing。你真的需要 mmap
的速度优化吗?
另一种方法可能是使用 io
模块 StringIO
并且从不将音频流写回磁盘:
理论上是这样的:
import io
...
memfile = io.StringIO()
tts.write_to_fp( memfile )
pygame.mixer.music.load( memfile ) # <<-- NOTE: untested
pygame.mixer.music.play()
# wait for audio to finish playing
while ( pygame.mixer.music.get_busy() ):
do_something_useful_and_handle_events()
memfile = None
但您仍然可能无法在播放音频时删除 memfile
。
我收到错误
ValueError: mmap closed or invalid
每当我尝试播放音频时。似乎是错误的代码是
def speak(audioString):
print(audioString)
tts = gTTS(text=audioString, lang='en')
tts.save("audio.mp3")
with open("audio.mp3") as f:
m = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
pygame.mixer.music.load(m)
pygame.mixer.music.play()
m.close()
我想要帮助,因为我正在尝试执行 textToSpeach 但无法执行。
编辑:将代码空间放在正确的位置
这是因为您在播放声音时关闭了 mmap m
。
def speak(audioString):
print(audioString)
tts = gTTS(text=audioString, lang='en')
tts.save("audio.mp3")
with open("audio.mp3") as f:
m = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
pygame.mixer.music.load(m)
pygame.mixer.music.play()
# wait for audio to finish playing
while ( pygame.mixer.music.get_busy() ):
pygame.event.pump() # <-- a bit dodgey
m.close()
一个快速测试是注释掉 m.close()
使其工作正常。您将需要编写一些其他方式来处理 loading/playing。你真的需要 mmap
的速度优化吗?
另一种方法可能是使用 io
模块 StringIO
并且从不将音频流写回磁盘:
理论上是这样的:
import io
...
memfile = io.StringIO()
tts.write_to_fp( memfile )
pygame.mixer.music.load( memfile ) # <<-- NOTE: untested
pygame.mixer.music.play()
# wait for audio to finish playing
while ( pygame.mixer.music.get_busy() ):
do_something_useful_and_handle_events()
memfile = None
但您仍然可能无法在播放音频时删除 memfile
。