天嵌 ARM开发社区

 找回密码
 注册
查看: 1636|回复: 3

TQ210的oss编程的问题

[复制链接]
紫禁城蜗牛 发表于 2013-4-23 01:55:46 | 显示全部楼层 |阅读模式
我用TQ210进行oss编程的时候,在设置采样位数,声道数,采样频率的时调用ioctl,但是那个ioctl函数的第二个参数cmd我不知道怎么设置。有大神帮忙啊。我用的是SNDCTL_DSP_SETFMT,SNDCTL_DSP_CHANNELS,SNDCTL_DSP_SPEED,但是,都提示Inapropriate ioctl for device
TQ-lkp 发表于 2013-4-23 09:11:55 | 显示全部楼层
你用的设备名是哪个?》
 楼主| 紫禁城蜗牛 发表于 2013-4-23 14:18:52 | 显示全部楼层
我用的是dev/snd,只有这个设备,没有dsp
f117cdh 发表于 2013-5-1 12:37:25 | 显示全部楼层
本帖最后由 f117cdh 于 2013-5-1 12:38 编辑

我用的是/dev/dsp阿,播放速度很快阿,
LibAudioOutHandle  MYAPI LibAudioOutCreateOutput(const char *szDevName,LibAudioOutFormat *format,

                                                                                                 _LibAudioOutBufferCallback callback,void *usrDataCallback,

                                                                                                 void *callbackThread,unsigned int threadMode)

{

        int handle = -1 ;

        int ret = 0 ;

        LibAudioOutOssPtr audio = NULL ;  

        int r = 0;

        int nBlockAlign = 0 ;

        int nAvgBytesPerSec = 0 ;







        if( szDevName == NULL ||  szDevName[0] == 0 )

        {

                handle = open("/dev/dsp", O_WRONLY);

                if( handle == -1 )

                {

                        return NULL ;

                }

        }

        else

        {

                handle = open( szDevName , O_WRONLY);

                if( handle == -1 )

                {

                        return NULL ;

                }

        }



        audio = (LibAudioOutOssPtr) malloc( sizeof(LibAudioOutOss) );

        if( audio == NULL )

        {

                close( handle ) ;

                return NULL ;

        }

        memset( audio , 0 , sizeof(LibAudioOutOss) );

        audio->handle = handle ;

        audio->format.bitsPerSample = 16 ;

        audio->format.numChannels = 1 ;

        audio->format.samplesPerSec = 8000 ;

        nBlockAlign = (unsigned short int)(( audio->format.numChannels * audio->format.bitsPerSample ) >> 3);

        nAvgBytesPerSec = audio->format.samplesPerSec * nBlockAlign;



        if( format != NULL )

        {

                memcpy( &(audio->format) ,  format , sizeof(LibAudioOutFormat) );

        }

        

        r=1;

        //ioctl (handle, SNDCTL_DSP_RESET, (char*)&r);

        r = fcntl(handle, F_GETFL, 0);
        fcntl(handle, F_SETFL, r&(~O_NONBLOCK)) ;

        r = ( (4 << 16) + nAvgBytesPerSec );

        //ioctl (handle, SNDCTL_DSP_SETFRAGMENT, (char*)&r);



        r = 3  ;

        //ioctl (handle, SNDCTL_DSP_SETTRIGGER, (char*)&r);



        r = 1  ;

        //ioctl (handle, SNDCTL_DSP_PROFILE, (char*)&r);




        r=1;

        //ioctl (handle, SNDCTL_DSP_SYNC, (char*)&r);

        r=0;

        //ioctl (handle, SNDCTL_DSP_NONBLOCK, (char*)&r);



        r = 0 ;

        if( audio->format.bitsPerSample == 16 )

        {

                r = AFMT_S16_LE ;

        }

        

        //ioctl (handle, SNDCTL_DSP_SETFMT, (char*)&r);
        r = audio->format.bitsPerSample ;
        ioctl (handle, SOUND_PCM_WRITE_BITS, (char*)&r);






        r  = (audio->format.numChannels == 2 ) ;

        //ioctl (handle, SNDCTL_DSP_STEREO, (char*)&r);  

        r = audio->format.numChannels ;

        //ioctl (handle, SNDCTL_DSP_CHANNELS, (char*)&r);
        ioctl (handle, SOUND_PCM_WRITE_CHANNELS, (char*)&r);
        



        r = audio->format.samplesPerSec  ;

        //ioctl (handle, SNDCTL_DSP_SPEED, (char*)&r);
        ioctl (handle, SOUND_PCM_WRITE_RATE, (char*)&r);   












        audio->bufferCallback = callback ;

        audio->usrDataCallback = usrDataCallback ;

        audio->adStatus = LibAudioOutStatusPlaying ;



        ListInit( &(audio->head) );

        MtxInit( &(audio->mtx), 0 );



        audio->hEv = EvWaitCreate();

        audio->hThread = Thread2Create( (void *)&ThreadAudioProc , audio, NULL, 0 );



        return audio ;

}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-20 13:49 , Processed in 1.031250 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表