如何将任何声音信号转换为列表音素?
即从数字信号到录音制作的音素列表的实际方法和/或代码。
例如:
lPhonemes = audio_to_phonemes(aSignal)
例如
from scipy.io.wavfile import read
iSampleRate, aSignal = read(sRecordingDir)
aSignal = #numpy array for the recorded word 'hear'
lPhonemes = ['HH', 'IY1', 'R']
我需要函数audio_to_phonemes
并非所有声音都是语言词,所以我不能只使用something that uses the google API作为例子。
修改
我不想要音频文字,我想要音频到音素。大多数图书馆似乎没有输出。您推荐的任何库都需要能够输出声音组成的有序音素列表。它需要在python中。
我也想知道声音到音素的过程是如何工作的。如果不是为了实现目的,那么为了利益起见。
答案 0 :(得分:12)
准确的音素识别并不容易归档,因为音素本身的定义非常松散。即使在良好的音频中,今天最好的系统也有大约18%的音素错误率(你可以检查由Alex Graves发布的TIMIT上的LSTM-RNN结果)。
在CMUSphinx中,Python中的音素识别是这样完成的:
from os import environ, path
from pocketsphinx.pocketsphinx import *
from sphinxbase.sphinxbase import *
MODELDIR = "../../../model"
DATADIR = "../../../test/data"
# Create a decoder with certain model
config = Decoder.default_config()
config.set_string('-hmm', path.join(MODELDIR, 'en-us/en-us'))
config.set_string('-allphone', path.join(MODELDIR, 'en-us/en-us-phone.lm.dmp'))
config.set_float('-lw', 2.0)
config.set_float('-beam', 1e-10)
config.set_float('-pbeam', 1e-10)
# Decode streaming data.
decoder = Decoder(config)
decoder.start_utt()
stream = open(path.join(DATADIR, 'goforward.raw'), 'rb')
while True:
buf = stream.read(1024)
if buf:
decoder.process_raw(buf, False, False)
else:
break
decoder.end_utt()
hypothesis = decoder.hyp()
print ('Phonemes: ', [seg.word for seg in decoder.seg()])
你需要从github查看最新的pocketsphinx才能运行这个例子。结果应如下所示:
('Best phonemes: ', ['SIL', 'G', 'OW', 'F', 'AO', 'R', 'W', 'ER', 'D', 'T', 'AE', 'N', 'NG', 'IY', 'IH', 'ZH', 'ER', 'Z', 'S', 'V', 'SIL'])
另请参阅wiki page
答案 1 :(得分:3)
我需要创建函数audio_to_phonemes
你基本上说:
我需要重新实施40年的语音识别研究
你不应该自己实现这一点(除非你即将成为语音识别领域的教授,并采用革命性的新方法),但应该使用众多现有框架中的一个。看看sphinx / pocketsphinx!
答案 2 :(得分:1)
看看Allosaurus,这是一种通用的电话识别器(约2000 lang),可为您提供IPA音素。在一个示例wave文件中,我确实下载了最新模型并在Python3中进行了尝试。
/ping