CNode

拼接 Buffer 生成 mp3文件,可能由于编码问题造成的丢失.

问答
TTongDaDa发布于8 年前最后回复8 年前8 回复4101 浏览0 收藏
    Promise.all([this.translateEnglishPronounce(sentence), baiduAudioCompond(sentence_translate)]).then(async (res) = {
                        if (!res) { throw TypeError("To makes audio that the type not have response.") }
                        const [senAudioBuf, SenTraAudioBuf] = res;
                        const isEndSentence = i === maxSentenceNum - 1;
                        sentences = Buffer.concat([sentences, senAudioBuf, SenTraAudioBuf])

                        fs.writeFileSync(path.join(__dirname,"word.mp3"), senAudioBuf); 
                        fs.writeFileSync(path.join(__dirname,"trans.mp3"), SenTraAudioBuf);

                        decodeToAudioBuff(Buffer.concat([SenTraAudioBuf, senAudioBuf])).then((audioBuff) => {
                            fs.writeFileSync(path.join(__dirname,"ttt.mp3"), audioBuff );
                        })

上面代码是请求google(word.mp3)和百度(trans.mp3)的语音接口他们都返回 mp3/mpeg 格式的数据,我单独存储两个接口返回的数据为mp3文件时,单独播放都是有正确内容的.

可问题是,使用 Buffer.concat 拼接两个buffer出现了文件大小叠加上去,但是播放出来的却只有Google的接口的声音(ttt.mp3)。令我百思不得其解啊。我需要怎样转换这里的编码?

查看回复

回复 (8)

Z
zengming00#1·8 年前

一般人我不告诉他

T
TongDaDa#2·8 年前
引用 zengming00一般人我不告诉他

@zengming00 您好,您也遇到过这种情况嘛

L
luckyScript#3·8 年前

https://en.wikipedia.org/wiki/MP3 去了解一下mp3的file structure。

T
TongDaDa#4·8 年前
引用 luckyScripthttps://en.wikipedia.org/wiki/MP3 去了解一下mp3的file structure。

@luckyScript 结构看一下,不知道如何从buffer转换到mp3。

D
dislido#5·8 年前

很多文件的拼接不是直接加一起就OK的
比如一些文件的结构是这样的:文件头-内容-结束符
两个文件直接拼一起就会变成 文件头-内容-结束符-文件头-内容-结束符
这样的话读到第一个文件的结束符就会认为结束了

W
wanglei8381#7·8 年前

@TongDaDa 请问问题你解决了吗

D
dbit-xia#8·8 年前

可以用16进制编辑器对比分析一下

[CNodeMD]

参与回复
登录后即可参与回复。登录