bt/music_sink 想要将音频数据从I2S1播放出来 需要更改什么地方呢?直接跑demo没有声音

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()这个函数, 在这里根据具体参数设置下

我尝试这样子做了 但Audio open注册的回调只能收到open 和close的cmd 导致PLAYBACK_GETDATA_EVENT_FLAG发不出去 是哪里出问题了呢?

bead80fef6d7c5e6d298532813c18c21

这里进来了没有,还有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正常了没有.

多媒体 - SiFli SDK编程指南 文档

已经正常了 感谢感谢