bt/music_sink 想要将音频数据从I2S播放出来 需要更改什么地方呢?直接跑demo没有声音
见上面链接,默认是从芯片的codec输出的,通过menuconfig, 把输出改为I2S。
CONFIG_AUDIO_TX_USING_I2S=y
而不是AUDIO_SPEAKER_USING_CODEC=y
可以menuconfig → middleware → enable audio → default audio path → I2S来选择,
同时要打开驱动的I2S, i2s的配置主从的,可能得看audio_server.c里怎么使用这个宏的地方改一下参数
配置后应能跑到i2s_config()这个函数, 在这里根据具体参数设置下
这里进来了没有,还有speaker_tx_done()这个回调了加log看看来了没有,
再往底层跟踪,就是Drv_i2s_audio.c里的HAL_I2S_TxHalfCpltCallback()和HAL_I2S_TxCpltCallback()这为给函数编译和进来了没有
static void config_tx(audio_device_speaker_t *my, audio_client_t client)
{
#if defined(AUDIO_TX_USING_I2S)
i2s_config(my, 1);
rt_device_set_tx_complete(my->i2s, speaker_tx_done);
#else
LOG_I(“config tx–set callback”);
rt_device_set_tx_complete(my->audprc_dev, speaker_tx_done);
rt_device_control(my->audprc_dev, AUDIO_CTL_SET_TX_DMA_SIZE, (void *)my->tx_dma_size);
#define mixer_sel 0x5050
这个i2s_config()进去了没有,还有i2s是master还是slave,这个函数内部要根据实际修改下
还有这句后面设置的 speaker_tx_done()回调了没有。
i2s_config(my, 1);
rt_device_set_tx_complete(my->i2s, speaker_tx_done);
另外是什么形态,是只需要多个app出声音互相打断,还是只是用i2s出播放,如果只是i2s播放,可以不用audio_server.c,直接调i2s驱动接口去播放也可以,得改下bt 处理得地方,调audio_open()和audio_write()改为直接用i2s驱动
可以先把I2S调通,example\rt_device\i2s这个工程是例子,可以把这个例子先调通,保证i2s驱动正常了,再使用audio server, 见这个i2s接口的文档
I2S接口.docx (319.0 KB)
这种文档还有其他接口的吗。
i2s播放内置pcm正常了没有.
已经正常了 感谢感谢
