资源简介

android音频解码的源代码(适用于音乐播放器) 其他不多说了,文件不大,又不用积分,下了看看自己需不需要,也许正是你需要的。

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include “main.h“
#include “msm_audio.h“
#include “std_audio.h“

#define MSM_DEVICE “/dev/msm_pcm_out“

static int msm_start(msm_ctx *ctx int channels int samplerate) {

    struct msm_audio_config config;
    unsigned char *buf;
    int i;

if(!ctx) return LIBLOSSLESS_ERR_NOCTX;

//  __android_log_print(ANDROID_LOG_INFO“liblossless““msm_start chans=%d rate=%d afd=%d track=%p“ 
// channels sampleratectx->afdctx->track);


        ctx->afd = open(MSM_DEVICE O_RDWR);
        if(ctx->afd < 0) return LIBLOSSLESS_ERR_INIT; 

if(ioctl(ctx->afd AUDIO_GET_CONFIG &config)) return LIBLOSSLESS_ERR_AU_GETCONF;

config.channel_count = channels;
config.sample_rate = samplerate;

if(ioctl(ctx->afd AUDIO_SET_CONFIG &config)) return LIBLOSSLESS_ERR_AU_SETCONF;

ioctl(ctx->afd AUDIO_FLUSH 0);

buf = (unsigned char *) malloc(config.buffer_size);
if(!buf) return LIBLOSSLESS_ERR_AU_BUFF;
memset(buf0config.buffer_size);
for (i = 0; i < config.buffer_count; i++) 
if(write(ctx->afdbufconfig.buffer_size) != config.buffer_size) {
free(buf);
return LIBLOSSLESS_ERR_AU_SETUP;
}

free(buf);
usleep(50);

if(ioctl(ctx->afd AUDIO_START 0)) return LIBLOSSLESS_ERR_AU_START;
ctx->conf_size = config.buffer_size;

return 0;
}

static void msm_stop(msm_ctx *ctx) {
    if(!ctx) return;
    if(ctx->afd >= 0) {
ioctl(ctx->afd AUDIO_STOP 0);
close(ctx->afd);
        ctx->afd = -1;
    }
}

int audio_start(msm_ctx *ctx int channels int samplerate) {

    if(!ctx) return LIBLOSSLESS_ERR_NOCTX;
    switch(ctx->mode) {
        case MODE_DIRECT:
           return msm_start(ctx channels samplerate);
        case MODE_LIBMEDIA:
           return libmedia_start(ctx channels samplerate);
case MODE_CALLBACK:
           return libmediacb_start(ctx channels samplerate);
        default:
           break;
    }
    return 0;
}

void audio_stop(msm_ctx *ctx) {

    if(!ctx || ctx->state == MSM_STOPPED) return;
    if(ctx->state != MSM_PAUSED) pthread_mutex_lock(&ctx->mutex);
    if(ctx->fd >= 0) {
close(ctx->fd); ctx->fd = -1;
    }
    switch(ctx->mode) {
        case MODE_DIRECT:
           msm_stop(ctx); break;
        case MODE_LIBMEDIA:
           libmedia_stop(ctx); break;
        case MODE_CALLBACK:
           libmediacb_stop(ctx); break;
        default:
           break;
    }
    ctx->state = MSM_STOPPED;
    pthread_mutex_unlock(&ctx->mutex);
}

void audio_wait_done(msm_ctx *ctx) {
    if(ctx->mode == MODE_CALLBACK) libmediacb_wait_done(ctx);
}

ssize_t audio_write(msm_ctx *ctx const void *buf size_t count) {

    if(!ctx) return LIBLOSSLESS_ERR_NOCTX;
    switch(ctx->mode) {
        case MODE_DIRECT:
           return write(ctx->afd buf count);
        ca

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2011-11-21 22:02  jni\
     目录           0  2011-11-21 22:02  jni\alac\
     文件       33503  2011-11-19 04:52  jni\alac\alac_decoder.c
     文件         309  2011-11-19 04:52  jni\alac\Android.mk
     文件        1610  2011-11-19 04:52  jni\alac\decomp.h
     文件       22833  2011-11-19 04:52  jni\alac\demux.c
     文件       12300  2011-11-19 04:52  jni\alac\m4a.c
     文件        4291  2011-11-19 04:52  jni\alac\m4a.h
     文件        8003  2011-11-19 04:52  jni\alac\main.c
     文件        3169  2011-11-19 04:52  jni\alac\README.rockbox
     目录           0  2011-11-21 22:02  jni\Android\
     目录           0  2011-11-21 22:02  jni\Android\include\
     文件        8373  2011-11-19 04:52  jni\Android\include\AudioHardware.h
     目录           0  2011-11-21 22:02  jni\Android\include\cutils\
     文件        1011  2011-11-19 04:52  jni\Android\include\cutils\adb_networking.h
     文件        1854  2011-11-19 04:52  jni\Android\include\cutils\array.h
     文件        1064  2011-11-19 04:52  jni\Android\include\cutils\ashmem.h
     文件        2472  2011-11-19 04:52  jni\Android\include\cutils\atomic.h
     文件        1705  2011-11-19 04:52  jni\Android\include\cutils\config_utils.h
     文件        1022  2011-11-19 04:52  jni\Android\include\cutils\cpu_info.h
     文件         965  2011-11-19 04:52  jni\Android\include\cutils\dir_hash.h
     文件        1295  2011-11-19 04:52  jni\Android\include\cutils\event_tag_map.h
     文件        1941  2011-11-19 04:52  jni\Android\include\cutils\fdevent.h
     文件        3565  2011-11-19 04:52  jni\Android\include\cutils\hashmap.h
     文件        1326  2011-11-19 04:52  jni\Android\include\cutils\jstring.h
     文件        9249  2011-11-19 04:52  jni\Android\include\cutils\log.h
     文件        2085  2011-11-19 04:52  jni\Android\include\cutils\logd.h
     文件        1353  2011-11-19 04:52  jni\Android\include\cutils\logger.h
     文件        3757  2011-11-19 04:52  jni\Android\include\cutils\logprint.h
     文件        1249  2011-11-19 04:52  jni\Android\include\cutils\memory.h
     文件        1478  2011-11-19 04:52  jni\Android\include\cutils\misc.h
............此处省略212个文件信息

评论

共有 条评论