【问题标题】:convert sound to list of phonemes in python将声音转换为python中的音素列表
【发布时间】:2015-08-22 16:14:11
【问题描述】:

如何将任何声音信号转换为列表音素?

即从数字信号到录音的音素列表的实际方法和/或代码。
例如:

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中。

我也很想知道声音到音素的过程是如何工作的。如果不是为了实现目的,那就是为了利益。

【问题讨论】:

    标签: python signal-processing voice-recognition phoneme


    【解决方案1】:

    我需要创建函数 audio_to_phonemes

    你基本上是在说:

    我需要重新实现 40 年的语音识别研究

    您不应该自己实现这一点(除非您即将成为语音识别领域的教授并拥有革命性的新方法),而应该使用许多现有框架之一。看看 sphinx / pocketsphinx!

    【讨论】:

    • 我真的不想重新发明轮子,我想实现现有的软件。 audio_to_phonemes 应该这样做。虽然我找不到任何东西,只是把声音传给我音位,然后停在那里。我不想要语音识别。我想要音素的音频。
    • 因为这是工作的一部分:看看现有的语音识别软件框架。它们不是单一的,但通常具有为它们提供音素列表的语音模型(当然取决于各个框架)。
    • 你绝对可以提取音素而不是 kaldi 中的单词。
    • @lCapp,你知道如何让他们离开 kaldi 吗?我还没有安装并浏览过 kaldi,但它会有助于了解更多
    【解决方案2】:

    准确的音素识别并不容易实现,因为音素本身的定义非常松散。即使在良好的音频中,当今最好的系统也有大约 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

    【讨论】:

    • 嗨尼古拉。我在安装最新版本时遇到问题,并提出了另一个问题。请您看一下好吗?:stackoverflow.com/questions/30728041/…
    • @Nikolay Shmyrev 你能详细说明一下 reg MODELDIR 吗?那里有什么?谢谢。
    • MODELDIR 是模型的位置。它可以在系统上的任何位置,这取决于您将文件放在哪里。
    • 不,你必须转换它。您可以使用ffmpeg: ffmpeg -i goforward.m4a -ar 16000 -ac 1 goforward.wav 转换为 wav,然后使用 goforward.wav
    【解决方案3】:

    看看Allosaurus,这是一个通用(~2000 lang)电话识别器,可为您提供 IPA 音素。在示例波形文件中,我确实下载了最新模型并在 Python3 中进行了尝试。

    $ python -m allosaurus.bin.download_model -m latest
    $ python -m allosaurus.run -i sample.wav
    æ l u s ɔ ɹ s
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-04
      • 1970-01-01
      • 2018-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-12
      • 2015-10-31
      相关资源
      最近更新 更多