- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我面临以下问题:
我用 Pyaudio 录制声音并将其保存为 Wav。Wav 文件是 48000hz(没有其他速率有效(采样率错误,但那是另一个故事))Wav 文件听起来不错,现在我想将 wav 转换为 flac 以将其发送到 google speech api。
问题是 avconf 将我的 48khz 输入 wav 转换为 8khz flac(使用 -ar 48000)。flac 文件只是白噪音,我已经尝试了很多,但即使谷歌也没有答案;)
注意:它对我来说工作正常,使用其他 16Khz 的麦克风完全没有问题。无论是 Pyaudios 采样率错误还是 avconv 问题。
代码如下:
录音:
chunk = 2048
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 48000
THRESHOLD = 525 #The threshold intensity that defines silence signal (lower than).
SILENCE_LIMIT = 3 #Silence limit in seconds. The max ammount of seconds where only silence is recorded. When this time passes the recording finishes and the file is delivered.
#open stream
p = pyaudio.PyAudio()
stream = p.open(format = FORMAT,
channels = CHANNELS,
rate = RATE,
input = True,
frames_per_buffer = chunk)
print "* listening. CTRL+C to finish manually."
all_m = []
data = ''
rel = RATE/chunk
slid_win = deque(maxlen=SILENCE_LIMIT*rel)
started = False
while (True):
data = stream.read(chunk)
slid_win.append (abs(audioop.avg(data, 2)))
if(True in [ x>THRESHOLD for x in slid_win]):
if(not started):
print "starting record"
started = True
all_m.append(data)
elif (started==True):
print "finished"
#the limit was reached, finish capture and deliver
filename = save_speech(all_m,p)
result=stt_google_wav(filename)
#reset all
started = False
#slid_win = deque(maxlen=SILENCE_LIMIT*rel)
#all_m= []
print "Google STT Done"
stream.close()
p.terminate()
return result
和:
def save_speech(data, p):
filename = 'output_'+str(int(time.time()))
# write data to WAVE file
data = ''.join(data)
wf = wave.open(filename+'.wav', 'wb')
wf.setnchannels(1)
wf.setsampwidth(p.get_sample_size(pyaudio.paInt16))
wf.setframerate(48000)
wf.writeframes(data)
wf.close()
print "finished saving wav: %s" % filename
return filename
转换为 Flac:
os.system("avconv -i "+ filename+".wav -y -ar 48000 "+ filename+ ".flac")
编辑 1:
Flac 实际上是 48khz,我不知道为什么 mplayer 向我显示 flac 是 8khz,我在我的电脑上播放它并且 flac 是完美的,无论如何 google api 似乎有问题,因为它没有返回任何内容。我假设 Rasberry 上 mplayer 的白噪声问题与 google Api 的问题有关,但我不知道它可能是什么。
音频文件:
output_1385413929.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, mono 48000 Hz
Flac 文件:
output_1385413929.flac: FLAC audio bitstream data, 16 bit, mono, 48 kHz, 204800 samples
已解决:我不知道为什么,我打开我的 pi 并想测试一下,突然它没有改变任何东西就工作了。
感谢您的帮助。来自德国的问候,弗洛
最佳答案
我同意 - 为我工作:
me@raspberrypi /mnt/share/Audio/xxxxxx $ file sample_audio.wav
sample_audio.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, stereo 8000 Hz
me@raspberrypi /mnt/share/Audio/xxxxxx $ file sample_audio.flac
sample_audio.flac: FLAC audio bitstream data, 16 bit, stereo, 48 kHz, 9131406 samples
关于python - Raspberry Pi 将 Pyaudio Wav 转换为 Flac 48000hz + Google Speech,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20131689/
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 8 年前。 Improv
我首先尝试使用 FFMPEG 将 CAFF 编码为 FLAC,但 iOS SDK 中没有 NSTask。我听说还有另一种使用 libFlac 将 CAFF 转换为 FLAC 的方法,我在 scumvm
当我尝试处理 flac 文件时,我得到了 “没有文件扩展名flac的处理程序” 错误。有没有办法在windows中解决这个问题。 最佳答案 这个答案可能有点晚了,但您需要版本 14.4.1a(可用 h
我管理了“概述教程”:https://cloud.google.com/speech/docs/getting-started 然后我尝试使用我自己的音频文件。我上传了一个采样率为 16000Hz 的
我正在尝试学习如何使用 SFML,但是当我尝试编译我的 C++ 代码时,Xcode 告诉我Command/bin/sh failed with exit code 2。这是我在单击更多信息时遇到的错误
我已经搜索了这方面的文档,但没有找到任何信息。 我在 Windows 10 Insider Build(也是最新的)64 位中使用最新的 FFMPEG nightly build。 我需要知道如何定义
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 8年前关闭。 Improve this qu
我发现使用 av_seek_frame() 查找 FLAC 文件并不适用于 ffmpeg。将 FLAC 解码为原始 PCM 工作正常,但一旦我调用了 av_seek_frame(),下一次调用 av_
我正在使用 FFMpeg 转换音频格式,特别是转换为 FLAC。由于某种原因,我无法在元数据中保留专辑封面。 我正在使用的当前命令格式是: ffmpeg -I source.alac -c:v cop
我想检查一个音频文件是否是 MP3 或 FLAC 检查只需要基本的但我想超越简单地检查文件扩展名 os.path.splitext 工作正常,但如果文件没有写入扩展名或有人传递了一个带有假扩展名的文件
我需要将 flac 文件转换为 wav 文件而不更改采样率和位深度。据我所知,更改这些属性可能会使音频失真,那么我如何指定它们不被更改? 此外,有什么方法可以防止元数据写入输出文件吗? 最佳答案 正如
我需要将 flac 文件分割成许多部分。我正在使用 jFLAC 库读取 flac 文件 FLACDecoder decoder = new FLACDecoder(inputStream); 然后我尝
32 位 Windows XP 上的 Qt 5.0.1 QMediaPlayer 只能播放 MP3 和 WAV 文件。我怎样才能扩展它来播放 OGG 和 FLAC 文件呢? 最佳答案 Qt 的多媒体模
我目前正在尝试编写一个 FLAC 到 WAV 转码器作为 C++ 练习,目前我在 FLAC 格式有关位排序的措辞方面遇到了一些困难。 这是讨论排序的(小)部分: All numbers used in
是否有适用于流的 C/C++ FLAC 标记库?无论我在哪里看,我只找到那些对文件有效的。这对我来说有点奇怪——为什么要使用像文件这样的有限的东西而不是更抽象的流。好吧,也许我只是被托管语言的简洁性宠
我使用 audoiRecord 类录制音频。现在我想将音频原始文件转换为 *flac 格式。我接下来将 *raw 文件转换为 wav: private void copyWaveFile(String
我正在开发应使用 Google Voice API 的 iPhone 应用程序,因此我的应用程序应将以 m4a 格式录制的语音转换为 flac。我当然应该使用 libflac,但由于链接器错误,我所有
我想录制语音,然后得到.flac 格式的文件,我可以将录制的声音保存为 flac 吗?如果是 - 怎么做?我试过了,但只有 .caf 可用.. 最佳答案 iOS 不支持 FLAC 检查这个:http:
我正在尝试使用 libSoX API 以编程方式转换内存缓冲区中的音频。例如,它可以很好地改变采样率,但在 PCM 和 FLAC 之间转换时我遇到了一些麻烦。 QByteArray inData =
编辑:我已经更新了下面的代码以类似于我取得的进展。我正在尝试自己编写 .wav header 。截至目前,代码无法正常工作,音频未正确写入文件。该代码不包含任何将其转换为 .flac 文件的尝试。 我
我是一名优秀的程序员,十分优秀!