python - 如何提取具有相应时间步长的音素数据?
问题描述
我可以使用 Pocketsphinx 成功地从音频文件中提取音素数据,但我怎样才能输出每个音素的持续时间?
def phonemes(filename):
audio_path = os.path.join(dir_path, filename)
# Create a decoder with certain model
config = Decoder.default_config()
config.set_string('-hmm', os.path.join(MODELDIR, 'en-us'))
config.set_string('-allphone', os.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(audio_path, 'rb')
while True:
buf = stream.read(1024)
if buf:
decoder.process_raw(buf, False, False)
else:
break
decoder.end_utt()
pho = [seg.word for seg in decoder.seg()]
print('Phoneme:', pho)
这是打印的样子:('Phonemes', ['SIL', 'HH', 'M', 'W', 'M', 'HH', 'HH', 'HH', 'HH', 'HH'、'HH'、'HH'、'HH'、'HH'、'L'、'HH'、'L'、'M'、'M'、'M'、'HH'、'HH ','HH','HH','L','HH','HH','HH','HH','HH','HH','M','M','W', 'M'、'HH'、'HH'、'ER'、'ER'、'HH'、'HH'、'M'、'M'、'M'、'HH'、'M'、'M ','G','M','M','M','SIL','M','HH','M','ER','SIL','W','M','M'、'NG'、'M'、'M'、'HH'、'L'、'M'、'M'、'SIL'、'W'、'HH'、'L'、'M '、'SIL'、'HH'、'AE'、'V'、'R'、'HH'、'+SPN+'、'HH'、'HH'、'SIL'、'V'、'UW' ,'L','V','N','HH','D','V','D','+SPN+','D','B','AA','SIL', '+SPN+'、'HH'、'HH'、'AH'、'N'、'DH'、'UW'、'L'、'HH'、'UW'、'V'、'D'、' N','M','D','M','UW','P'])'SIL'、'W'、'HH'、'L'、'M'、'SIL'、'HH'、'AE'、'V'、'R'、'HH'、'+SPN+'、' HH'、'HH'、'SIL'、'V'、'UW'、'L'、'V'、'N'、'HH'、'D'、'V'、'D'、'+SPN+ '、'D'、'B'、'AA'、'SIL'、'+SPN+'、'HH'、'HH'、'AH'、'N'、'DH'、'UW'、'L' , 'HH', 'UW', 'V', 'D', 'N', 'M', 'D', 'M', 'UW', 'P'])'SIL'、'W'、'HH'、'L'、'M'、'SIL'、'HH'、'AE'、'V'、'R'、'HH'、'+SPN+'、' HH'、'HH'、'SIL'、'V'、'UW'、'L'、'V'、'N'、'HH'、'D'、'V'、'D'、'+SPN+ '、'D'、'B'、'AA'、'SIL'、'+SPN+'、'HH'、'HH'、'AH'、'N'、'DH'、'UW'、'L' , 'HH', 'UW', 'V', 'D', 'N', 'M', 'D', 'M', 'UW', 'P'])'V'、'UW'、'L'、'V'、'N'、'HH'、'D'、'V'、'D'、'+SPN+'、'D'、'B'、' AA'、'SIL'、'+SPN+'、'HH'、'HH'、'AH'、'N'、'DH'、'UW'、'L'、'HH'、'UW'、'V '、'D'、'N'、'M'、'D'、'M'、'UW'、'P'])'V'、'UW'、'L'、'V'、'N'、'HH'、'D'、'V'、'D'、'+SPN+'、'D'、'B'、' AA'、'SIL'、'+SPN+'、'HH'、'HH'、'AH'、'N'、'DH'、'UW'、'L'、'HH'、'UW'、'V '、'D'、'N'、'M'、'D'、'M'、'UW'、'P'])UW','P'])UW','P'])
解决方案
简单地
print('Phoneme:', decoder.seg())
或者您可以使用seg.start
,seg.end
除了seg.word
.
推荐阅读
- arrays - 如何在 16 位 (15:0) 的数组中将特定位设置为 1 并同时清除剩余位
- json - 将结构转换为 []json.RawMessage
- python - 如何根据其他列中的一个而不是两个条件删除重复项
- c# - 如何从管理配置文件页面在 Asp.Net core 2.1 中为 ApplicationUser 使用扩展模型?
- vue.js - 尝试使用 Axios 使用来自 HTTP 请求的数据呈现 Vue 组件
- r - 在 dplyr 中计算分组数据的条件摘要
- azure - 如何将 CosmosDb 与分区键一起用作流分析输出?
- excel - 通过 Excel VBA 为 Outlook 生成带有缩放背景图像的 HTML 邮件
- java - 通过其他类的场景对象访问JavaFX的控制器类(对象)
- angular - 存在性能问题的选项卡内容