Liquor

Liquor

10个粉丝

15

问答

0

专栏

0

资料

Liquor  发布于  2023-07-13 11:22:04
采纳率 27%
15个问答
554

海思ai直接输出保存到pcm文件

   

最近又遇到个问题
如何将ai的音频数据直接输出到文件中
我是直接在HI_MPI_AI_GetFrame()获取音频帧之后fwrite写到文件当中的,然后保存下来的pcm文档就全是电流音滋滋滋的
我觉得应该是fwrite的参数有点问题 贴上代码
fwrite(&stFrame,1,stFrame.u32Len, pstAiCtl->pfd); //stFrame为AUDIO_FRAME_S类型的结构体,定义音频帧数据结构体
//u32Len为结构体里面的一个成员,也就是帧中每个通道的数据长度
//后面的pfd是前面一个函数打开文件返回的文件描述符
这里有一个问题 平时在编码之后写入的是stream 但是从ai直接获取的是frame,也就是stream的单位数据,不知道能不能这样写

我来回答
回答5个
时间排序
认可量排序

邓晓

20个粉丝

1

问答

0

专栏

19

资料

邓晓 2023-07-13 11:35:54
认可0

fwrite怎么写了结构体,应该写buf的虚拟地址,fwrite(stFrame.vir_addr[0],1,stFrame.u32Len, pstAiCtl->pfd);

Liquor
Liquor   回复   邓晓  2023-07-13 13:29:25
0

虚拟地址写进去 还是一直是杂音 滋滋滋的 像是很慢放歌曲 然后加了电

醉藻

33个粉丝

0

问答

2

专栏

128

资料

醉藻 2023-07-13 13:01:30
认可0

使用fwrite的方式并不适合音频数据的写入。这是因为将整个音频帧的结构体直接写入文件,而不是写入音频样本数据本身。这导致在打开文件后得到的是一些二进制数据,而不是有效的音频样本。

Liquor
Liquor   回复   醉藻  2023-07-13 13:22:30
0

海思的sample_audio就是用的fwrite,但是他那个sample里面是将编码之后的音频帧存到文件的,解码之后的就直接有一个函数HI_MPI_ADEC_SendStream()发送码流了,但是ai只有getframe的函数用于获取音频帧

Liquor

10个粉丝

15

问答

0

专栏

0

资料

Liquor 2023-07-13 16:50:06
认可1

破案了 家人们 首先enWorkmode应该使用I2S_SLAVE 虽然我也不懂为啥采集pcm音频不用PCM的工作模式,其次u32FrmNum和u32PtNumPerFrm的参数需要自己慢慢调试配置,然后采样率44100和48000,但是我用的这个模拟输入芯片只能支持到32000所以音频还是有瑕疵

或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
相关问答
无更多相似问答 去提问
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区