<4D F736F F D20B5DA36D5C22020D2F4C6B5BFF2BCDC>

Size: px
Start display at page:

Download "<4D F736F F D20B5DA36D5C22020D2F4C6B5BFF2BCDC>"

Transcription

1 ANDROID 多媒体编程从初学到精通 作者 : 华清远见 第 6 章 音频框架 -- Android AAC LC/LTP HE-AACv1 AAC+ HE-AACv2 Enhanced AAC+ AMR-NB AMR-WB MP3 MIDI Ogg Vorbis PCM/WAV AMR-NB AMR-WB AAC LC/LTP PCM 在 Eclair 前,Android 的原生层音频框架采用了 Audio Flinger, 在 Eclair 中, 做了进一步的完善和扩展 Android 的音频管理框架如图 6-1 所示 6-1 Android

2 1.OpenMAX IL OpenMAX IL 作为 Open Core 采用的标准接口被用来创建 配置 加载编解码器的组件 更详细的信息参考 节 OpenMAX IL 集成层 2. 编解码器 实现了相关音频的标准 ( 如 MP3 AAC 和 AMR-NB 等 ) 的编解码算法等 这部分的内容将在 6.2 节单频编解码过程中介绍 3.LibAudio 位于音频驱动和音频管理器之间的接口层, 管理设备配置 增益控制和音频的后置处理等, 音频策略服务 (Audio Policy Service) 即位于这个共享库中 这部分内容在 6.1 节单频管理框架中介绍 音频管理框架 在 Eclair 前, 为了统一管理音频输出设备,Google 采用了 Audio Flinger 音频管理器来进行音频输出设备的管理, 在 Eclair 中, 进一步引入了音频策略服务的概念 Audio Flinger 能将多个音频流解码为 PCM 流并输出到音频输出设备上 在音频管理框架中, 利用 AudioSystem 来封装底层物理设备, 利用 AudioManager 来管理音量和铃声模式控制, 利用 AudioService 来管理音量, 利用音频策略服务来提供音频设备间的漫游功能 Audio Manager 是 AudioService 和 Audio System 的上层封装 图 6-2 显示了 Eclair 的音频管理框架 6-2 Eclair Audio Flinger 在 system_init.cpp 或者 main_mediaserver.cpp 中,Audio Flinger 被创建, 在创建过程中,Audio Flinger 会创建一个 AudioHardwareInterface 对象, 通过 AudioHardwareInterface 对象来与底层音频设备进行通信 如图 6-3 所示为 Audio Flinger 的类图 2

3 BpAudioFlingerClient IAudioFlingerClient 专业始于专注卓识源于远见 BnAudioFlingerClient IAudioTrack IAudioFlinger IAudioRecord BpAudioFlinger BnAudioFlinger AudioResampler AudioBufferProvider AudioStreamOut AudioFlinger AudioMixer AudioStreamIn AudioHardwareInterface AudioHardwareGeneric A2dpAudioInterface AudioHardwareBase AudioDumpInterface 6-3 AudioFlinger 其中 BnAudioFlinger 为本地 IAudioFlingerClient 对象,BpAudioFlinger 为远程 IAudioFlingerClient 对象在本地的代理 为了利用 AudioFlinger 服务, 需要将 AudioFlinger 服务注册到服务管理器中,AudioFlinger 的注册过程为 : void AudioFlinger::instantiate() defaultservicemanager()->addservice( String16("media.audio_flinger"), new AudioFlinger()); 如果开发者需要获得 AudioFlinger 句柄, 同样需要通过服务管理器进行, 同时还要判断 AudioFlinger 客户端是否存在, 实现过程如下 : 代码 6-1 获得 AudioFlinger 句柄 const sp<iaudioflinger>& AudioSystem::get_audio_flinger() Mutex::Autolock _l(glock); if (gaudioflinger.get()==0) sp<iservicemanager> sm=defaultservicemanager(); // 获取服务管理器 sp<ibinder> binder; do binder=sm->getservice(string16("media.audio_flinger"));// 获取服务 if (binder!= 0) break; LOGW("AudioFlinger not published, waiting..."); usleep(500000); // 0.5s while(true); if (gaudioflingerclient==null) gaudioflingerclient=new AudioFlingerClient(); // 创建 AudioFlinger 客户端 if (gaudioerrorcallback) gaudioerrorcallback(no_error); binder->linktodeath(gaudioflingerclient); // 注册接收者 gaudioflinger=interface_cast<iaudioflinger>(binder); gaudioflinger->registerclient(gaudioflingerclient);// 注册客户端 LOGE_IF(gAudioFlinger==0, "no AudioFlinger!?"); return gaudioflinger; 3

4 在 Audio Flinger 的管理框架中,AudioHardwareInterface 是底层音频设备的抽象, 而 AudioStreamIn 是对音频输入设备的抽象,AudioStreamOut 是对音频输出设备的抽象 AudioStreamOut 和 AudioStreamIn 描述了音频设备的采样速率 音频缓冲 信道 音频格式 设备状态等信息,AudioHardwareInterface 对音频参数 音量 音频路由 ( 有线耳机 扬声器 蓝牙耳机等 ) 音频输入输出流等信息进行了抽象 Audio Flinger 通过 AudioTrack 来进行声道 ( 单声道 左声道 右声道 ) 的设置 在 AudioFlinger 的创建过程中, 要首先创建音频设备, 然后设置音频参数 实现如下 : 代码 6-2 AudioFlinger 的创建过程 AudioFlinger::AudioFlinger() : BnAudioFlinger(), maudiohardware(0), mmastervolume(1.0f), mmastermute(false), mnextthreadid(0) mhardwarestatus=audio_hw_idle; // 空闲状态 maudiohardware=audiohardwareinterface::create(); // 创建音频设备 mhardwarestatus=audio_hw_init; if (maudiohardware->initcheck()==no_error) // 为 S/W 混音器打开 16 比特的输出流 // 初始化状态 // 检查音频设备是否初始化 setmode(audiosystem::mode_normal); // 设备模式 setmastervolume(1.0f); // 设置音量 setmastermute(false); // 设置互斥 LOGE("Couldn't even initialize the stubbed audio hardware!"); 如果是在模拟器上运行, 创建的音频设备为 AudioHardwareGeneric 对象, 如果在实际环境中运行, 通过 AudioHardwareInterface* createaudiohardware(void) 创建具体设备的对象 如果 AudioFlinger 运行的进程因异常死掉,AudioSystem 会收到一个事件通知 : void AudioSystem::AudioFlingerClient::binderDied(const wp<ibinder>& who) Mutex::Autolock _l(audiosystem::glock); AudioSystem::gAudioFlinger.clear(); if (gaudioerrorcallback) gaudioerrorcallback(dead_object); LOGW("AudioFlinger server died!"); 当收到媒体服务进程死掉的消息时, 通过 AudioSystem.setErrorCallback() 注册的回调函数 maudiosystemcallback 会收到 AudioSystem.AUDIO_STATUS_SERVER_DIED 信息 当 Audio Service 监听到这个消息时,Audio Service 会调用原生方法 AudioSystem.isMusicActive() 强制重启 Audio Flinger 当重启 Audio Flinger 成功后, 通过 AudioSystem.setErrorCallback() 注册的回调函数 maudiosystemcallback 会收到 AudioSystem.AUDIO_STATUS_OK 信息 当 Audio Service 监听到这个消息时,Audio Service 会配置底层音频系统, 如模式 路由 音量等 具体实现如下 : 代码 6-3 配置底层音频系统 case MSG_MEDIA_SERVER_STARTED: Log.e(TAG, "Media server started."); // 设置设备连接状态 Set set=mconnecteddevices.entryset(); Iterator i=set.iterator(); while(i.hasnext()) Map.Entry device=(map.entry)i.next();audiosystem.setdeviceconnectionstate ((Integer)device. getkey()).intvalue(),audiosystem.device_state_available, 4

5 (String)device.getValue()); AudioSystem.setPhoneState(mMode); // 设置 Phone 状态 AudioSystem.setForceUse(AudioSystem.FOR_COMMUNICATION, mforceduseforcomm); AudioSystem.setForceUse(AudioSystem.FOR_RECORD, mforceduseforcomm); // 设置流音量 int numstreamtypes=audiosystem.getnumstreamtypes(); for (int streamtype=numstreamtypes - 1; streamtype>=0; streamtype--) int index; VolumeStreamState streamstate=mstreamstates[streamtype]; AudioSystem.initStreamVolume(streamType, 0, (streamstate.mindexmax + 5) / 10); if (streamstate.mutecount()==0) index=streamstate.mindex; index=0; setstreamvolumeindex(streamtype, index); // 配置铃声模式 setringermodeint(getringermode(), false); break; 音频系统对上层的播放接口之一为 Audio Track, 每一路音频会对应一个 IAudioTrack 对象 它会通过 IBinder 来远程调用 Audio Flinger:: createtrack() 方法 为了创建一个 IAudioTrack 对象, 需要制定流类型 采用速率 音频格式 频道数 帧数 共享缓冲等, 具体过程如下 : 代码 6-4 Audio Flinger:: createtrack() 的实现 status_t AudioTrack::createTrack( int streamtype, uint32_t samplerate, int format, int channelcount, int framecount, uint32_t flags, const sp<imemory>& sharedbuffer, audio_io_handle_t output) status_t status; const sp<iaudioflinger>& audioflinger=audiosystem::get_audio_flinger();// 获取服务 if (audioflinger==0) LOGE("Could not get audioflinger"); return NO_INIT; sp<iaudiotrack> track=audioflinger->createtrack(getpid(),// 创建一路音频 streamtype,samplerate,format,channelcount,framecount, ((uint16_t)flags)<<16,sharedbuffer,output,&status); if (track==0) LOGE("AudioFlinger could not create track, status: %d", status); return status; sp<imemory> cblk=track->getcblk(); // 获得控制块 if (cblk==0) LOGE("Could not get control block"); return NO_INIT; maudiotrack.clear(); // 清空通路 maudiotrack=track; mcblkmemory.clear(); mcblkmemory=cblk; mcblk=static_cast<audio_track_cblk_t*>(cblk->pointer()); mcblk->out=1; 5

6 // 更新缓冲大小 mframecount=mcblk->framecount; if (sharedbuffer==0) mcblk->buffers=(char*)mcblk + sizeof(audio_track_cblk_t); mcblk->buffers=sharedbuffer->pointer(); mcblk->stepuser(mframecount); mcblk->volumelr=(int32_t(int16_t(mvolume[left] * 0x1000)) << 16) int16_t(mvolume[right] * 0x1000); mcblk->buffertimeoutms=max_startup_timeout_ms; mcblk->waittimems=0; return NO_ERROR; AudioFlinger::createTrack() 方法会在内部生成一个 Track 对象, 并包装为一个 TrackHandle 对象返回给 AudioTrack 在实现中,AudioTrack 会通过 Track 对象来执行控制操作 (start stop 等 ) 和写入操作, 而 AudioFlinger 则负责管理多个 Track 对象 两者之间类似生产者和消费者的关系 根据操作的不同,AudioFlinger 在创建 Track 对象时, 会创建不同的线程, 用于播放的 PlaybackThread MixerThread DirectOutputThread 线程, 用于音频记录的 RecordThread 线程, 并创建一个 TrackHandle 句柄返回客户端 Track::start() 方法和 Track::stop() 方法在 AudioFlinger 中起着向 AudioFlinger:: mactivetracks 队列中添加或去除 Track 的作用 下面是音频播放线程的 Track::start() 方法的实现过程 : 代码 6-5 Track::start() 实现的实现过程 status_t AudioFlinger::PlaybackThread::Track::start() status_t status=no_error; LOGV("start(%d), calling thread %d", mname, IPCThreadState::self()->getCalling Pid()); sp<threadbase> thread=mthread.promote(); if (thread!= 0) Mutex::Autolock _l(thread->mlock); int state=mstate; if (mstate==paused) mstate=trackbase::resuming; LOGV("PAUSED => RESUMING (%d) on thread %p", mname, this); mstate=trackbase::active; LOGV("? => ACTIVE (%d) on thread %p", mname, this); if (!isoutputtrack() && state!= ACTIVE && state!= RESUMING) thread->mlock.unlock(); status=audiosystem::startoutput(thread->id(), (AudioSystem::stream_type)mStreamType); // 开始输出 thread->mlock.lock(); if (status==no_error) PlaybackThread *playbackthread=(playbackthread *)thread.get(); playbackthread->addtrack_l(this); // 添加 Track mstate=state; status=bad_value; return status; 下面是音频播放线程的 Track:: stop () 的实现过程 : 6

7 代码 6-6 Track::stop() 的实现过程 void AudioFlinger::PlaybackThread::Track::stop() LOGV("stop(%d), calling thread %d", mname, IPCThreadState::self()->getCalling Pid()); sp<threadbase> thread=mthread.promote(); if (thread!= 0) Mutex::Autolock _l(thread->mlock); int state=mstate; if (mstate > STOPPED) mstate=stopped; // 如果 track 没有激活, 刷新缓冲 PlaybackThread *playbackthread=(playbackthread *)thread.get(); if (playbackthread->mactivetracks.indexof(this)<0) reset(); LOGV("(> STOPPED) => STOPPED (%d) on thread %p", mname, playbackthread); if (!isoutputtrack() && (state==active state==resuming)) thread->mlock.unlock(); AudioSystem::stopOutput(thread->id(), (AudioSystem::stream_type)mStreamType);// 停止输出 thread->mlock.lock(); Audio Flinger 对 Track 的管理主要是通过当前线程的 threadloop() 来实现的 下面是 AudioFlinger::MixerThread::threadLoop() 的实现过程 : 代码 6-7 AudioFlinger::MixerThread::threadLoop() 的实现过程 bool AudioFlinger::MixerThread::threadLoop() int16_t* curbuf=mmixbuffer; Vector< sp<track> > trackstoremove; uint32_t mixerstatus=mixer_idle; nsecs_t standbytime=systemtime(); size_t mixbuffersize=mframecount * mframesize; nsecs_t maxperiod=seconds(mframecount) / msamplerate * 3; nsecs_t lastwarning=0; bool longstandbyexit=false; uint32_t activesleeptime=activesleeptimeus(); uint32_t idlesleeptime=idlesleeptimeus(); uint32_t sleeptime=idlesleeptime; while (!exitpending()) // 检查待决条件 processconfigevents(); mixerstatus=mixer_idle; Mutex::Autolock _l(mlock); if (checkfornewparameters_l()) mixbuffersize=mframecount * mframesize; maxperiod=seconds(mframecount) / msamplerate * 3; activesleeptime=activesleeptimeus(); idlesleeptime=idlesleeptimeus(); const SortedVector< wp<track> >& activetracks=mactivetracks; // 在短延迟后, 将音频硬件设为待机 if UNLIKELY((!activeTracks.size() && systemtime() > standbytime) msuspended) if (!mstandby) LOGV("Audio hardware entering standby, mixer %p, msuspended %d\n", this, msuspended); 7

8 moutput->standby(); mstandby=true; mbyteswritten=0; if (!activetracks.size() && mconfigevents.isempty()) // 刷新 binder 命令缓冲 IPCThreadState::self()->flushCommands(); if (exitpending()) break; LOGV("MixerThread %p TID %d going to sleep\n", this, gettid()); mwaitworkcv.wait(mlock); LOGV("MixerThread %p TID %d waking up\n", this, gettid()); if (mmastermute==false) char value[property_value_max]; property_get("ro.audio.silent", value, "0"); if (atoi(value)) LOGD("Silence is golden"); setmastermute(true); standbytime=systemtime() + kstandbytimeinnsecs; sleeptime=idlesleeptime; continue; mixerstatus=preparetracks_l(activetracks, &trackstoremove); if (LIKELY(mixerStatus==MIXER_TRACKS_READY)) // 混音器缓冲 maudiomixer->process(curbuf); sleeptime=0; standbytime=systemtime() + kstandbytimeinnsecs; if (sleeptime==0) if (mixerstatus==mixer_tracks_enabled) sleeptime=activesleeptime; sleeptime=idlesleeptime; if (mbyteswritten!= 0 (mixerstatus==mixer_tracks_enabled && longstandbyexit)) memset (curbuf, 0, mixbuffersize); sleeptime=0; LOGV_IF((mBytesWritten==0 && (mixerstatus==mixer_tracks_enabled && longstandbyexit)), "anticipated start"); if (msuspended) sleeptime=idlesleeptime; if (sleeptime==0) mlastwritetime=systemtime(); minwrite=true; int byteswritten=(int)moutput->write(curbuf, mixbuffersize);// 写入数据 if (byteswritten > 0) mbyteswritten += byteswritten; mnumwrites++; minwrite=false; nsecs_t now=systemtime();// 系统时间 nsecs_t delta=now - mlastwritetime; if (delta > maxperiod) mnumdelayedwrites++; if ((now - lastwarning) > kwarningthrottle) 8

9 LOGW("write blocked for %llu msecs, %d delayed writes, thread %p", ns2ms(delta), mnumdelayedwrites, this); lastwarning=now; if (mstandby) longstandbyexit=true; mstandby=false; usleep(sleeptime); trackstoremove.clear(); if (!mstandby) moutput->standby(); // 进入待机 LOGV("MixerThread %p exiting", this); return false; 当进行音频播放时, 需要打开输出流, 实现过程如下 : 代码 6-8 AudioFlinger::openOutput() 的实现过程 int AudioFlinger::openOutput(uint32_t *pdevices, uint32_t *psamplingrate, uint32_t *pformat, uint32_t *pchannels, uint32_t *platencyms, uint32_t flags) status_t status; PlaybackThread *thread=null; mhardwarestatus=audio_hw_output_open; uint32_t samplingrate=psamplingrate? *psamplingrate : 0; uint32_t format=pformat? *pformat : 0; uint32_t channels=pchannels? *pchannels : 0; uint32_t latency=platencyms? *platencyms : 0; LOGV("openOutput(), Device %x, SamplingRate %d, Format %d, Channels %x, flags %x", pdevices? *pdevices : 0, samplingrate, format, channels, flags); if (pdevices==null *pdevices==0) return 0; Mutex::Autolock _l(mlock); // 打开输出流 AudioStreamOut *output=maudiohardware->openoutputstream(*pdevices, (int *)&format, &channels, &samplingrate, &status); LOGV("openOutput() openoutputstream returned output %p, SamplingRate %d, Format %d, Channels %x, status %d", output, samplingrate, format, channels, status); mhardwarestatus=audio_hw_idle; 9

10 if (output!= 0) if ((flags & AudioSystem::OUTPUT_FLAG_DIRECT) (format!=audiosystem::pcm_16_bit) (channels!=audiosystem::channel_out_stereo)) thread=new DirectOutputThread(this, output, ++mnextthreadid); LOGV("openOutput() created direct output: ID %d thread %p", mnextthreadid, thread); thread=new MixerThread(this, output, ++mnextthreadid); LOGV("openOutput() created mixer output: ID %d thread %p", mnextthreadid, thread); mplaybackthreads.add(mnextthreadid, thread); if (psamplingrate) *psamplingrate=samplingrate; if (pformat) *pformat=format; if (pchannels) *pchannels=channels; if (platencyms) *platencyms=thread->latency(); return mnextthreadid; return 0; 当需要进行音频录制时, 需要打开输入流, 实现过程如下 : 代码 6-9 AudioFlinger:: openinput() 的实现过程 int AudioFlinger::openInput(uint32_t *pdevices, uint32_t *psamplingrate, uint32_t *pformat, uint32_t *pchannels, uint32_t acoustics) status_t status; RecordThread *thread=null; uint32_t samplingrate=psamplingrate? *psamplingrate : 0; uint32_t format=pformat? *pformat : 0; uint32_t channels=pchannels? *pchannels : 0; uint32_t reqsamplingrate=samplingrate; uint32_t reqformat=format; uint32_t reqchannels=channels; if (pdevices==null *pdevices==0) return 0; Mutex::Autolock _l(mlock); // 打开输入流 AudioStreamIn *input=maudiohardware->openinputstream(*pdevices, (int *)&format, &channels, &samplingrate, &status, (int *)&format, (AudioSystem::audio_in_acoustics)acoustics); LOGV("openInput() openinputstream returned input %p, SamplingRate %d, Format %d, (int *)&format, Channels %x, acoustics %x, status %d", input, samplingrate, format, channels, acoustics, status); if (input==0 && status==bad_value && reqformat==format && format==audiosystem::pcm_16_bit && (samplingrate <= 2 * reqsamplingrate) && 10

11 (AudioSystem::popCount(channels)<3) && (AudioSystem::popCount(reqChannels)<3)) LOGV("openInput() reopening with proposed sampling rate and channels"); input=maudiohardware->openinputstream(*pdevices, (int *)&format, &channels, &samplingrate, &status, (AudioSystem::audio_in_acoustics)acoustics); if (input!= 0) // 启动录音线程 thread=new RecordThread(this, input, reqsamplingrate, reqchannels, (int *)&format,++mnextthreadid); mrecordthreads.add(mnextthreadid, thread); LOGV("openInput() created record thread: ID %d thread %p", mnextthreadid, thread); if (psamplingrate) *psamplingrate=reqsamplingrate; if (pformat) *pformat=format; if (pchannels) *pchannels=reqchannels; input->standby(); return mnextthreadid; return 0; 需要说明的是,Audio System 的路由功能在 Eclair 中被下移到音频策略服务中, 这部分的功能将在下一节介绍 Audio Policy Service 音频策略服务 (Audio Policy Service) 是在 Eclair 中独立出来的一个新服务 如图 6-4 所示为音频策略服务的类图, 其中 AudioPolicyInterface 和 AudioPolicyClientInterface 定义了平台特定音频策略管理器和 Android 通用音频策略客户端之间的通信接口, 平台特定的音频策略管理器必须实现 AudioPolicyInterface 中定义的方法, 而 AudioPolicyClientInterface 则控制着音频输入 / 输出流的活动和配置 平台特定音频策略管理器负责特定平台的音频路由和音量控制 音频策略服务主要负责跟踪当前系统状态 ( 可插拔设备连接 电话状态 用户请求等 ) 系统的状态变化和用户行为将会通过 AudioPolicyInterface 接口发送给音频策略管理器 (Audio Policy Manager), 并在 Audio Flinger 创建 AudioTrack 对象时, 处理 getoutput() putoutput() 等操作, 处理与 AudioRecord 对象相关的 getinput() putinput() 等, 处理音频控制请求 AudioPolicyManager AudioPolicyManagerGeneric AudioPolicyClientInterface AudioSystem AudioPolicyInterface AudioPolicyService BpAudioPolicyService IAudioPolicyService BnAudioPolicyService 6-4 根据应用的不同, 音频策略服务提供了不同的路由策略, 在 Eclair 中,Android 目前提供的路由策略分为 STRATEGY_MEDIA STRATEGY_PHONE STRATEGY_SONIFICATION STRATEGY_DTMF 等 在 STRATEGY_MEDIA 路由策略中, 如果正在进行通话, 则不进行音乐播放 在 STRATEGY_PHONE 路由策略中, 其策略需要首先考虑当前的音频设备, 然后根据设定的优先级 11

12 选择 在 STRATEGY_SONIFICATION 路由策略中, 如果正在进行通话,STRATEGY_ SONIFICATION 路由策略同 STRATEGY_PHONE 路由策略一致 ; 如果不在通话过程中, 且当前应用的是车载蓝牙设备, 则不进行路由 ; 如果当前应用的是桌面蓝牙设备, 路由到扬声器设备 在 STRATEGY_DTMF 路由策略中, 如果正在进行通话, 则 STRATEGY_DTMF 路由策略与 STRATEGY_PHONE 路由策略一致 ; 如果不在通话过程中, 则 STRATEGY_DTMF 路由策略与 STRATEGY_MEDIA 路由策略一致 具体策略如下 : 代码 6-10 音频策略服务的路由策略 uint32_t AudioPolicyManager::getDeviceForStrategy(routing_strategy strategy) uint32_t device=0; switch (strategy) case STRATEGY_DTMF: //DTMF 音 if (mphonestate!= AudioSystem::MODE_IN_CALL) // 在电话挂断后,DTMF 执行和 MEDIA 同样的策略 device=getdeviceforstrategy(strategy_media); break; // 在通话中,DTMF 执行和 PHONE 同样的策略 case STRATEGY_PHONE: // 通话 // 对于 phone 路由策略, 首先考虑强制通信, 然后根据优先级顺序执行 switch (mforceuse[audiosystem::for_communication]) case AudioSystem::FORCE_BT_SCO: // 蓝牙 if (mphonestate!= AudioSystem::MODE_IN_CALL strategy!= STRATEGY_DTMF) device=mavailableoutputdevices & AudioSystem::DEVICE_OUT_BLUETOOTH_SCO_CARKIT; if (device) break; device=mavailableoutputdevices &AudioSystem::DEVICE_OUT_BLUETOOTH_SCO_HEADSET; if (device) break; device=mavailableoutputdevices &AudioSystem::DEVICE_OUT_BLUETOOTH_SCO; if (device) break; default: // FORCE_NONE device=mavailableoutputdevices & AudioSystem::DEVICE_OUT_WIRED_HEADPHONE; if (device) break; device=mavailableoutputdevices & AudioSystem::DEVICE_OUT_WIRED_HEADSET; if (device) break; if (mphonestate!= AudioSystem::MODE_IN_CALL) if (mforceuse[audiosystem::for_dock]==audiosystem::force_bt_car_dock) device=mavailableoutputdevices & AudioSystem::DEVICE_OUT_BLUETOOTH_A2DP; if (mforceuse[audiosystem::for_dock]==audiosystem::force_bt_desk_dock) device=mavailableoutputdevices & AudioSystem::DEVICE_OUT_SPEAKER; if (device) break; device=mavailableoutputdevices & AudioSystem::DEVICE_OUT_EARPIECE; if (device==0) LOGE("getDeviceForStrategy() earpiece device not found"); break; case AudioSystem::FORCE_SPEAKER: if (mphonestate!= AudioSystem::MODE_IN_CALL strategy!=strategy_dtmf) device=mavailableoutputdevices & AudioSystem::DEVICE_OUT_BLUETOOTH_SCO_CARKIT; if (device) break; if (mphonestate!=audiosystem::mode_in_call && mforceuse[audiosystem::for_dock]==audiosystem::force_bt_car_dock) device=mavailableoutputdevices & AudioSystem::DEVICE_OUT_BLUETOOTH_A2DP; 12

13 if (device) break; device=mavailableoutputdevices & AudioSystem::DEVICE_OUT_SPEAKER; if (device==0) LOGE("getDeviceForStrategy() speaker device not found"); break; break; case STRATEGY_SONIFICATION: if (mphonestate==audiosystem::mode_in_call) device=getdeviceforstrategy(strategy_phone); break; if (mforceuse[audiosystem::for_dock]!= AudioSystem::FORCE_BT_CAR_DOCK) device=mavailableoutputdevices & AudioSystem::DEVICE_OUT_SPEAKER; if (device==0) LOGE("getDeviceForStrategy() speaker device not found"); if (mforceuse[audiosystem::for_dock]==audiosystem::force_bt_desk_dock) if (mavailableoutputdevices & AudioSystem::DEVICE_OUT_WIRED_HEADPHONE) device = AudioSystem::DEVICE_OUT_WIRED_HEADPHONE; if (mavailableoutputdevices & AudioSystem::DEVICE_OUT_WIRED_HEADSET) device = AudioSystem::DEVICE_OUT_WIRED_HEADSET; break; device=0; case STRATEGY_MEDIA: uint32_t device2=mavailableoutputdevices & AudioSystem::DEVICE_OUT_AUX_DIGITAL; if (device2==0) if (mforceuse[audiosystem::for_dock]!= AudioSystem::FORCE_NONE) device2=mavailableoutputdevices & AudioSystem::DEVICE_OUT_WIRED_HEADPHONE; if (device2==0) device2=mavailableoutputdevices & AudioSystem::DEVICE_OUT_WIRED_HEADSET; if (device2==0 && strategy==strategy_sonification && ma2dpoutput!= 0 && mscodeviceaddress==ma2dpdeviceaddress && mphonestate==audiosystem::mode_ringtone) device2=mavailableoutputdevices & AudioSystem::DEVICE_OUT_SPEAKER; if (device2==0) device2=mavailableoutputdevices & AudioSystem::DEVICE_OUT_BLUETOOTH_A2DP; if (device2==0) device2=mavailableoutputdevices & AudioSystem::DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES; if (device2==0) device2=mavailableoutputdevices & AudioSystem::DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER; if (device2==0) device2=mavailableoutputdevices & AudioSystem::DEVICE_OUT_WIRED_HEADPHONE; if (device2==0) device2=mavailableoutputdevices & AudioSystem::DEVICE_OUT_WIRED_HEADSET; if (device2==0) device=mavailableoutputdevices & AudioSystem::DEVICE_OUT_SPEAKER; if (device==0) LOGE("getDeviceForStrategy() speaker device not found"); 13

14 device = device2; if (mphonestate==audiosystem::mode_in_call &&!AudioSystem::isA2dpDevice((AudioSystem::audio_devices)device) && device!=getdeviceforstrategy(strategy_phone)) device=0; LOGV("getDeviceForStrategy() incompatible media and phone devices"); break; default: LOGW("getDeviceForStrategy() unknown strategy: %d", strategy); break; LOGV("getDeviceForStrategy() strategy %d, device %x", strategy, device); return device; 平台特定音频策略管理器在实际实现中, 作为共享库 libaudio.so 通过 libaudioflinger.so 被链接到系统中 音频编解码过程 为了减小传输过程中的数据流量和存储空间, 媒体文件必须进行压缩 以 CD 音质的 WAV 格式为例, 如果采样率为 44.1kHz, 即每秒接收 个值, 立体声, 采样数据宽度为 16 位 (2 字节 ), 这 4 分钟长度的歌曲占据的空间为 : 声道 2 字节 8 比特 60 秒 4 分钟 = bit MB 如果从网上下载该音乐, 假设传输速率为 128Kb/s, 则下载时间为 : bit/128K/1024bit/60s 43 分钟 因此考虑到流量和存储空间的因素, 在进行音频记录时必须考虑压缩, 在目前的主流移动计算平台上, 支持的音频记录格式主要有 AAC 和 AMR-NB 两种 部分厂商也提供了对元数据 PCM 的记录支持 AAC(Adpative Audio Coding) 是在 MP3 基础上开发出来的, 其主要算法早在 1997 年即开发完成 与 MP3 相比,AAC 采用了修正离散余弦变换 (MDCT,Modified Discrete Cosiine Transform) 算法, 具有拥有更高的压缩率, 能够支持最多 48 个全音域声道, 最高支持 8kHz~96kHz 的采样速率, 具有更高的解码效率, 占用的解码资源更少 AAC 有效地解决了 MP3 的压缩率较低 音质尤其是在低码率下不够理想 仅有两个声道等问题 目前支持 AAC 的厂家主要有 Nokia Apple Qalcomm Panasonic 等 关于 AAC 的编码器在 PC 上有很多 (Fraunhofer IIS FHG AAC NERO AAC QuickTime/iTune AAC Psytel Coding Technologies Dolby AAC FAAC 等 ), 官方定义的扩展名为 *.mp4(mpeg-4) MP4 文件可以装载形如 H.264 视频及 MPEG4-AAC 音频, 也可只装载没有声音的视频 ( 单独 H.264) 或者装载没有图像的音频 ( 单独 MPEG4-AAC) 另外,Apple 公司将只包含音频的 MPEG4-AAC 扩展名定义为 *.m4a 需要说明的是,*.aac 扩展名不属于 MPEG4-AAC 规格, 而是属于 MPEG2-AAC 规格, 近来已经很少用 关于 AAC 压缩算法的规范可以参考 ISO/IEC (MPEG-2 AAC Audio Codec) 和 ISO/IEC (MPEG-4 Audio Codec AAC Low Complexity) 在 OpenCORE 中, 目前并没有提供对 AAC 编码的支持 在本书中就不再对 AAC 的编解码进行过多的介绍了 AMR 根据带宽的不同可以分为自适应多速率宽带编码 (AMR-WB,AMR WideBand) 和自适应多速率窄带编码 (AMR-NB,AMR NarrowBand) 其中 AMR-WB 的音频带宽为 50~7000Hz, 采样速率为 16kHz, 14

15 而 AMR-NB 的音频带宽为 300~3400Hz, 采样速率为 8kHz AMR-WB 同时被 ITU-T 和 3GPP 采用, 也称 G722.2 标准 AMR-WB 抗扰度优于 AMR-NB 在 Android 中, 上层目前提供了 MediaRecorder 类等来支持音频内容的编码 AMR 的编码过程 AMR 在 2G 和 3G 通信中, 都是最常用的一种音频编码格式, 根据制定组织的不同, 帧结构略有不同 目前业界采用的 AMR 的帧结构主要是由 ETS WMF IETF 和 3GPP 等制定 其中 GDM&&GPRS 采用的是 ETS 制定的帧结构,WCDMA&&TD-SCDMA 采用的是 3GPP 制定的帧结构 在 3GPP TS [28] 和 3GPP TS [29] 中,3GPP 针对 AMR-NB 和 AMR-WB 定义了两种 AMR (Adaptive Multi-Rate) 的帧结构 :AMR IF1(Interface Format 1) 和 AMR IF2(Intetrface Format2) 在 RFC 3267 [30] 中定义了 AMR 的流媒体传输格式和文件存储格式 AMR 的压缩比比较大, 压缩质量较差, 主要用于人声 通话等场景 GSM 采用的增强型全速率编码 (EFR,Enhenced Full Rate) 的采样频率为 8kHz, 音频带宽为 200~ 3400Hz, 与此相比 AMR-WB 使用户可主观感受到比以前更加自然 舒适和易于分辨的话音 在 3G 应用中, 由于 3G 的带宽远比 2G 要宽, 足以支持 AMR-WB 采用从 6.6Kb/s 到 23.85Kb/s 共 9 种编码, 使得语音质量超越 PSTN 固定电话 AMR 具备支持 16 种编码方式的能力 AMR-NB 已经支持 8 种编码方式, 剩余 8 种用于噪音或暂时被保留 ;AMR-WB 已经支持 9 种编码方式, 剩余 7 种用于噪音或暂时被保留 AMR 有两种类型的帧格式 :AMR IF1 和 AMR IF2 AMR IF1 的帧结构包括 3 个部分 :AMR 头信息 AMR 附加信息 ( 用于模式匹配 检错等 ) AMR 核心帧 ( 语音和噪音数据 ) 图 6-5 显示的是 AMR IF1 帧结构 6-5 AMR IF1 其中帧质量指示符 (Frame Quality Indicator) 表示帧数据的质量, 如果为 0, 则表示是损坏的帧, 如果为 1, 则表示是正常的帧 在帧数据部分, 层 A(Class A) 表示的是一帧中最重要 最敏感的数据, 该层数据一旦损坏, 该帧将无法被解码, 所以在无线传输 AMR 数据时, 一般会通过 AMR 附加信息的校验信息对这部分数据进行保护 15

16 层 B(Class B) 的数据为次要数据, 层 C(Class C) 的数据为非重要数据 与 AMR IF1 帧结构不同, 在 AMR IF2 帧结构中, 除去了帧质量指示符和 AMR 附加信息 但增加了填充位部分, 以使整个帧的长度达到字节的整数倍 图 6-6 显示的是 AMR IF2 的帧结构 6-6 AMR IF2 在编码方式上, 根据记录的比特率,AMR-WB 提供了 9 种不同的编码速率 :6.60 Kb/s 8.85 Kb /s Kb /s Kb /s Kb /s Kb /s Kb /s Kb /s Kb /s 对应的模式指示符 (Mode Indication) 和模式请求 (Mode Request) 为 0~8 同样根据记录的比特率,AMR-NB 提供了 8 种不同的编码速率, 分别为 4.75 Kb /s 5.15 Kb /s 5.90 Kb /s 6.70 Kb /s(pdc-efr) 7.40 Kb /s(tdma-efr) 7.95 Kb /s 10.2 Kb /s 12.2 Kb /s (GSM-EFR) 对应的模式指示符 (Mode Indication) 和模式请求 (Mode Request) 为 0~7 在编码方式上,AMR 采用了 3GPP TS 26 Series 的多速率码激励线性预测 (MR-ACELP,Multi-rate Algebraic Code Excited Linear Prediction) 编码方法 这种方法基于 CELP 编码模式, 用全极点线性滤波器模拟语音特性 AMR 以 20ms 的语音作为一帧进行处理, 每一帧又分为 4 个 5ms 的子帧 AMR 可以工作于多种不同的编码速率, 并且在每帧的边界处可以在多种源速率之间进行切换 在 OpenCORE 中, 相关的编码过程位于 external\opencore\codecs_v2\audio\ gsm_amr\ amr_nb\enc 目录下 支持的帧结构包括 AMR_TX_WMF AMR_TX_IF2 AMR_TX_ETS AMR_TX_IETF 等 其中 AMR_TX_WMF 表示的是无线多媒体论坛 (WMF,Wireless Multimedia Forum) 制定的帧结构 ; AMR_TX_IF2 表示的是 3GPP 制定的帧结构 ;AMR_TX_ETS 表示的是欧洲电信标准 (ETS,European Telecommunication Standard) 制定的帧结构 ;AMR_TX_IETF 表示是 IETF 制定的帧结构 编码的入口 AMREncode() 函数位于 amrencode.cpp 文件中, AMREncode() 函数首先调用 GSM EFR 编码器进行编码, 然后根据指定的输出格式参数 output_format 的值, 将 GSM EFR 编码器的输出转换为相应的帧结构 如下为 AMR 的编码过程 : 代码 6-11 AMR 的编码过程 Word16 AMREncode(void *pencstate,void *psidsyncstate,enum Mode mode, Word16 *pencinput,uword8 *pencoutput,enum Frame_Type_3GPP *p3gpp_frame_type,word16 output_format) Word16 ets_output_bfr[max_serial_size+2]; UWord8 *ets_output_ptr; Word16 num_enc_bytes=-1; Word16 i; enum TXFrameType tx_frame_type; enum Mode usedmode=mr475; // WMF 或 IF2 帧编码 if ((output_format==amr_tx_wmf) (output_format==amr_tx_if2) (output_format==amr_tx_ietf)) // 通话帧编码 (20ms 16

17 #ifndef CONSOLE_ENCODER_REF //GSM EFR 编码器的 PV 实现 GSMEncodeFrame(pEncState, mode, pencinput, ets_output_bfr, &usedmode); # //GSM EFR 编码器的 ETS 实现 Speech_Encode_Frame(pEncState, mode, pencinput, ets_output_bfr, &usedmode); #endif // 判断帧类型 sid_sync(psidsyncstate, usedmode, &tx_frame_type); if (tx_frame_type!= TX_NO_DATA) *p3gpp_frame_type=(enum Frame_Type_3GPP) usedmode; // 为 SID 帧添加 SID 类型和模式信息 if (*p3gpp_frame_type==amr_sid) if (tx_frame_type==tx_sid_first) ets_output_bfr[amrsid_txtype_bit_offset] &= 0x0000; if (tx_frame_type==tx_sid_update) ets_output_bfr[amrsid_txtype_bit_offset] = 0x0001; for (i=0; i<num_amrsid_txmode_bits; i++) ets_output_bfr[amrsid_txmode_bit_offset+i] = (mode >> i) & 0x0001; // 无数据传递 *p3gpp_frame_type=(enum Frame_Type_3GPP)AMR_NO_DATA; // 判断输出帧类型 / if (output_format==amr_tx_ietf) // 转换为 IETF 帧结构 ets_to_ietf(*p3gpp_frame_type, ets_output_bfr, pencoutput, &(((Speech_Encode_FrameState*)pEncState)->cod_amr_state->common_amr_tbls)); num_enc_bytes=wmfencbytesperframe[(word16) *p3gpp_frame_type]; if (output_format==amr_tx_wmf) // 转换为 WMF 帧结构 ets_to_wmf(*p3gpp_frame_type, ets_output_bfr, pencoutput, &(((Speech_Encode_FrameState*)pEncState)->cod_amr_state->common_amr_tbls)); num_enc_bytes=wmfencbytesperframe[(word16) *p3gpp_frame_type]; if (output_format==amr_tx_if2) // 转换为 AMR IF2 帧结构 ets_to_if2(*p3gpp_frame_type, ets_output_bfr, pencoutput, &(((Speech_ Encode_FrameState*)pEncState)->cod_amr_state->common_amr_tbls)); num_enc_bytes=if2encbytesperframe[(word16) *p3gpp_frame_type]; // ETS 帧编码 if (output_format==amr_tx_ets) 17

18 #ifndef CONSOLE_ENCODER_REF GSMEncodeFrame(pEncState, mode, pencinput, &ets_output_bfr[1], &usedmode); # Speech_Encode_Frame(pEncState, mode, pencinput, &ets_output_bfr[1], &usedmode); #endif *p3gpp_frame_type=(enum Frame_Type_3GPP) usedmode; sid_sync(psidsyncstate, usedmode, &tx_frame_type); ets_output_bfr[0]=tx_frame_type; if (tx_frame_type!= TX_NO_DATA) ets_output_bfr[1+max_serial_size]=(word16) mode; ets_output_bfr[1+max_serial_size]=-1; ets_output_ptr=(uword8 *) & ets_output_bfr[0]; for (i=0; i<2*(max_serial_size + 2); i++) *(pencoutput + i)=*ets_output_ptr; ets_output_ptr += 1; num_enc_bytes=2 * (MAX_SERIAL_SIZE + 2); // 无效帧格式 num_enc_bytes=-1; return(num_enc_bytes); GSM 中针对 ETS 帧结构的编码过程如下 : 代码 6-12 GSM 中针对 ETS 帧结构的编码过程 void GSMEncodeFrame( void *state_data, enum Mode mode, Word16 *new_speech, Word16 *serial, enum Mode *usedmode ) Speech_Encode_FrameState *st = (Speech_Encode_FrameState *) state_data; Word16 prm[max_prm_size]; Word16 syn[l_frame]; Word16 i; // 初始化输出帧 for (i=0; i<max_serial_size; i++) serial[i]=0; #if!defined(no13bit) for (i=0; i<l_frame; i++) new_speech[i]=new_speech[i] & 0xfff8; #endif Pre_Process(st->pre_state, new_speech, L_FRAME); // 调用语音编码器 cod_amr(st->cod_amr_state, mode, new_speech, prm, usedmode, syn); 18

19 Prm2bits(*usedMode, prm, &serial[0], &(st->cod_amr_state->common_amr_tbls)); return; 将 GSM ETS 帧结构转换为 AMR IF2 帧结构的过程如下 : 代码 6-13 ETS 帧结构转换为 AMR IF2 帧结构的过程 void ets_to_if2( enum Frame_Type_3GPP frame_type_3gpp, Word16 *ets_input_ptr,uword8 *if2_output_ptr, CommonAmrTbls* common_amr_tbls) Word16 i; Word16 k; Word16 j=0; Word16 *ptr_temp; Word16 bits_left; UWord8 accum; const Word16* const* reorderbits_ptr=common_amr_tbls->reorderbits_ptr; const Word16* numofbits_ptr=common_amr_tbls->numofbits_ptr; if (frame_type_3gpp<amr_sid) if2_output_ptr[j++]=(uword8)(frame_type_3gpp) (ets_input_ptr[reorderbits_ptr[frame_type_3gpp][0]]<<4) (ets_input_ptr[reorderbits_ptr[frame_type_3gpp][1]]<<5) (ets_input_ptr[reorderbits_ptr[frame_type_3gpp][2]]<<6) (ets_input_ptr[reorderbits_ptr[frame_type_3gpp][3]]<<7); for (i=4; i<numofbits_ptr[frame_type_3gpp] - 7;) if2_output_ptr[j] = (UWord8) ets_input_ptr[reorderbits_ptr[frame_type_3gpp][i++]]; if2_output_ptr[j] = (UWord8) ets_input_ptr[reorderbits_ptr[frame_type_3gpp][i++]] << 1; if2_output_ptr[j] = (UWord8) ets_input_ptr[reorderbits_ptr[frame_type_3gpp][i++]] << 2; if2_output_ptr[j] = (UWord8) ets_input_ptr[reorderbits_ptr[frame_type_3gpp][i++]] << 3; if2_output_ptr[j] = (UWord8) ets_input_ptr[reorderbits_ptr[frame_type_3gpp][i++]] << 4; if2_output_ptr[j] = (UWord8) ets_input_ptr[reorderbits_ptr[frame_type_3gpp][i++]] << 5; if2_output_ptr[j] = (UWord8) ets_input_ptr[reorderbits_ptr[frame_type_3gpp][i++]] << 6; if2_output_ptr[j++] = (UWord8) ets_input_ptr[reorderbits_ptr[frame_type_3gpp][i++]] << 7; bits_left=4 + numofbits_ptr[frame_type_3gpp] - ((4 + numofbits_ptr[frame_type_3gpp]) & 0xFFF8); if (bits_left!= 0) if2_output_ptr[j]=0; for (k=0; k<bits_left; k++) if2_output_ptr[j] = (UWord8) ets_input_ptr[reorderbits_ptr[frame_type_3gpp][i++]] << k; if (frame_type_3gpp!= AMR_NO_DATA) 19

20 if2_output_ptr[j++]=(uword8)(frame_type_3gpp) (ets_input_ptr[0]<<4) (ets_input_ptr[1]<<5) (ets_input_ptr[2]<<6) (ets_input_ptr[3]<<7); ptr_temp=&ets_input_ptr[4]; bits_left=((4+numofbits_ptr[frame_type_3gpp]) & 0xFFF8); for (i=(bits_left-7)>>3; i>0; i--) accum=(uword8) * (ptr_temp++); accum =(UWord8) * (ptr_temp++)<<1; accum =(UWord8) * (ptr_temp++)<<2; accum =(UWord8) * (ptr_temp++)<<3; accum =(UWord8) * (ptr_temp++)<<4; accum =(UWord8) * (ptr_temp++)<<5; accum =(UWord8) * (ptr_temp++)<<6; accum =(UWord8) * (ptr_temp++)<<7; if2_output_ptr[j++]=accum; bits_left=4+numofbits_ptr[frame_type_3gpp]-bits_left; if (bits_left!= 0) if2_output_ptr[j]=0; for (i=0; i<bits_left; i++) if2_output_ptr[j] =(ptr_temp[i]<<i); if2_output_ptr[j++]=(uword8)(frame_type_3gpp); return; 专业始于专注卓识源于远见 至于 ets_to_ietf() 函数和 ets_to_wmf() 函数分别针对 ETS 帧结构转换为 IETF 帧结构和 WMF 帧结构的过程, 相关的实现位于 ets_to_if2.cpp 和 ets_to_wmf.cpp 文件中 这里就不再多做介绍了 AMR 常用于手机铃声等领域 另外在 MMS 中,AMR 也是音频附件的唯一标准, 这均归功于 AMR 压缩比较大的特点 AMR 的解码过程 在进行 AMR 解码时,OpenCORE 定义了 ETS(AMR-WB AMR-NB ) ITU(AMR-WB ) MIME_IETF(AMR-WB) WMF(AMR-NB) IF2(AMR-NB)5 种帧结构, 帧结构的定义和编码实现没有统一, 目前仅使用了 ETS WMF IF2 这 3 种帧结构 AMR 的解码过程和编码过程相反, 首先需要根据输入格式参数 input_format 确定当前要解码的帧结构 如果是 IETF 或者 AMR IF2, 则首先将其帧结构转换为 ETS 帧结构, 然后调用 GSMFrameDecode() 函数进行解码 ; 如果是 ETS 帧结构, 直接调用 GSMFrameDecode() 函数进行解码 AMR 的解码实现位于 amrdecode.cpp 文件中,AMR 的解码过程如下 : 代码 6-14 AMR 的解码过程 Word16 AMRDecode( void enum Frame_Type_3GPP UWord8 Word16 *state_data, frame_type, *speech_bits_ptr, *raw_pcm_buffer, 20

21 bitstream_format input_format ) Word16 *ets_word_ptr; enum Mode mode=(enum Mode)MR475; int modestore; int tempint; enum RXFrameType rx_type=rx_no_data; Word16 dec_ets_input_bfr[max_serial_size]; Word16 i; Word16 byte_offset=-1; Speech_Decode_FrameState *decoder_state =(Speech_Decode_FrameState *) state_data; if ((input_format==wmf) (input_format==if2)) if (input_format==wmf) // 转换编码 wmf_to_ets(frame_type,speech_bits_ptr,dec_ets_input_bfr,&(decoder_state->decoder amrstate.common_amr_tbls)); byte_offset=wmfdecbytesperframe[frame_type]; // 转换编码 if2_to_ets(frame_type, speech_bits_ptr, dec_ets_input_bfr, &(decoder_state->decoder_amrstate.common_amr_tbls)); byte_offset=if2decbytesperframe[frame_type]; if (frame_type <= AMR_122) mode=(enum Mode) frame_type; rx_type=rx_speech_good; if (frame_type==amr_sid) modestore=0; for (i=0; i<num_amrsid_rxmode_bits; i++) tempint=dec_ets_input_bfr[amrsid_rxmode_bit_offset+i] << i; modestore = tempint; mode=(enum Mode) modestore; if (dec_ets_input_bfr[amrsid_rxtype_bit_offset]==0) rx_type=rx_sid_first; rx_type=rx_sid_update; if (frame_type<amr_no_data) byte_offset=-1; mode=decoder_state->prev_mode; rx_type=rx_no_data; 21

22 if (input_format==ets) ets_word_ptr=(word16 *) speech_bits_ptr; rx_type=(enum RXFrameType) * ets_word_ptr; ets_word_ptr++; for (i=0; i<max_serial_size; i++) dec_ets_input_bfr[i]=*ets_word_ptr; ets_word_ptr++; if (rx_type!= RX_NO_DATA) mode=(enum Mode) * ets_word_ptr; mode=decoder_state->prev_mode; byte_offset=2 * (MAX_SERIAL_SIZE + 2); byte_offset=-1; if (byte_offset!= -1) #ifndef CONSOLE_DECODER_REF GSMFrameDecode(decoder_state, mode, dec_ets_input_bfr, rx_type, raw_pcm_buffer); # Speech_Decode_Frame(decoder_state, mode, dec_ets_input_bfr, rx_type, raw_pcm_buffer); #endif decoder_state->prev_mode=mode; return (byte_offset); ETS 帧结构的解码过程如下 : 代码 6-15 ETS 帧结构的解码过程 void GSMFrameDecode( Speech_Decode_FrameState *st, enum Mode mode, Word16 *serial, enum RXFrameType frame_type, Word16 *synth) Word16 parm[max_prm_size + 1]; Word16 Az_dec[AZ_SIZE]; Flag *poverflow=&(st->decoder_amrstate.overflow); #if!defined(no13bit) Word16 i; #endif if ((frame_type==rx_sid_bad) (frame_type==rx_sid_update)) Bits2prm(MRDTX, serial, parm, &st->decoder_amrstate.common_amr_tbls); 专业始于专注卓识源于远见 22

23 Bits2prm(mode, serial, parm, &st->decoder_amrstate.common_amr_tbls); Decoder_amr(&(st->decoder_amrState),mode,parm,frame_type,synth,Az_dec); Post_Filter(&(st->post_state),mode,synth,Az_dec,pOverflow); /* post HP filter, and 15->16 bits */ Post_Process(&(st->postHP_state),synth,L_FRAME,pOverflow); #if!defined(no13bit) for (i=0; i<l_frame; i++) synth[i]=synth[i] & 0xfff8; #endif return; 从 AMR IF2 帧结构转换为 ETS 帧结构的过程如下 : 代码 6-16 AMR IF2 帧结构转换为 ETS 帧结构的过程 专业始于专注卓识源于远见 void if2_to_ets( enum Frame_Type_3GPP frame_type_3gpp, UWord8 *if2_input_ptr, Word16 *ets_output_ptr, CommonAmrTbls* common_amr_tbls) Word16 i; Word16 j; Word16 x=0; const Word16* numcompressedbytes_ptr=common_amr_tbls->numcompressedbytes_ptr; const Word16* numofbits_ptr=common_amr_tbls->numofbits_ptr; const Word16* const* reorderbits_ptr=common_amr_tbls->reorderbits_ptr; if (frame_type_3gpp<amr_sid) for (j=4; j<8; j++) ets_output_ptr[reorderbits_ptr[frame_type_3gpp][x++]]= (if2_input_ptr[0]>>j) & 0x01; for (i=1; i<numcompressedbytes_ptr[frame_type_3gpp]; i++) for (j=0; j<8; j++) if (x >= numofbits_ptr[frame_type_3gpp]) break; ets_output_ptr[reorderbits_ptr[frame_type_3gpp][x++]] = (if2_input_ptr[i]>>j) & 0x01; for (j=4; j<8; j++) ets_output_ptr[x++]= (if2_input_ptr[0]>>j) & 0x01; for (i=1; i<numcompressedbytes_ptr[frame_type_3gpp]; i++) for (j=0; j<8; j++) ets_output_ptr[x++]= 23

24 (if2_input_ptr[i]>>j) & 0x01; return; 专业始于专注卓识源于远见 需要注意的是, 在解码的实现上, 目前仅支持 AMR IF2 ETS 帧结构, 对 IETF 帧结构没有提供支持, 关于 wmf_to_ets() 函数的实现位于 amrdecode.cpp 文件中 MP3 的解码过程 MP3(Moving Picture Experts Group Audio Layer III) 是目前最流行的音频编码格式, 通过丢弃脉冲编码调制 (PCM) 音频数据中对人类听觉不重要的数据和采用较好的压缩算法, 可以获得 1 10 甚至 1 12 的压缩率 MP3 在 1991 年被标准化 MP3 采样率在 16~48kHz 之间, 编码速率在 8Kb/s~1.5Mb/s 之间 随着信号处理技术的不断发展,MP3 的一些缺点 ( 如压缩率低 仅有两个声道 音质不理想等 ) 逐渐暴露出来, 最新一代的 AAC 音频编码格式已经登场 但 MP3 作为人们最熟悉的音频编码格式还会在日常生活中继续流行 MP3 的解码需要经过同步及检错 哈夫曼解码 逆量化 立体声解码 反锯齿 IMDCT 和子带合成等运算, 其中 IMDCT 过程的运算量占到了整个解码运算总量的 19% 具体过程如图 6-7 所示 MP3 比特流 Synchronization and Error Check Huffman Decoding Descaling Reordering Alias Reduction IMDCT Synthesis Polyphase Filter Bank PCM 6-7 MP3 MP3 的解码过程如下 : 代码 6-17 MP3 的解码过程 Int Mp3Decoder::Mp3DecodeAudio(OMX_S16* aoutbuff, OMX_U32* aoutputlength, OMX_U8** ainputbuf, OMX_U32* ainbufsize, OMX_S32* aframecount, OMX_AUDIO_PARAM_PCMMODETYPE* aaudiopcmparam, OMX_AUDIO_PARAM_MP3TYPE* aaudiomp3param, OMX_BOOL amarkerflag, OMX_BOOL* aresizeflag) int32 Status=MP3DEC_SUCCESS; *aresizeflag=omx_false; if (iinitflag==0) if (*aframecount!= 0) e_equalization EqualizType=iMP3DecExt->equalizerType; imp3decext->inputbuffercurrentlength=0; iinputusedlength=0; iaudiomp3decoder->startl(imp3decext, false, false, false, EqualizType); iinitflag=1; imp3decext->pinputbuffer=*ainputbuf + iinputusedlength; imp3decext->poutputbuffer=&aoutbuff[0]; imp3decext->inputbuffercurrentlength=*ainbufsize; 24

25 imp3decext->inputbufferusedlength=0; if (OMX_FALSE==aMarkerFlag) // 如果没设标志位, 检测帧边界 iinputusedlength=0; return MP3DEC_INCOMPLETE_FRAME; //If the marker flag is not set, find out the frame boundaries Status=iAudioMp3Decoder->SeekMp3Synchronization(iMP3DecExt); if (1==Status) if (0==iMP3DecExt->inputBufferCurrentLength) *ainbufsize -= imp3decext->inputbuffermaxlength; iinputusedlength += imp3decext->inputbuffermaxlength; imp3decext->inputbufferusedlength += imp3decext->inputbuffermaxlength; return MP3DEC_SUCCESS; *ainputbuf+=iinputusedlength; imp3decext->inputbufferusedlength=0; iinputusedlength=0; return MP3DEC_INCOMPLETE_FRAME; imp3decext->outputframesize=(*aoutputlength); //16 位采样 #if PROFILING_ON OMX_U32 StartTime=OsclTickCount::TickCount(); #endif Status=iAudioMp3Decoder->ExecuteL(iMP3DecExt); #if PROFILING_ON OMX_U32 EndTime=OsclTickCount::TickCount(); itotalticks+=(endtime - StartTime); if (MP3DEC_SUCCESS==Status) inumoutputsamples+=imp3decext->outputframesize; #endif if (MP3DEC_SUCCESS==Status) if (0==*aFrameCount) aaudiopcmparam->nsamplingrate=imp3decext->samplingrate; aaudiopcmparam->nchannels =imp3decext->num_channels; //Input Port Parameters aaudiomp3param->nsamplerate=imp3decext->samplingrate; aaudiomp3param->nchannels =imp3decext->num_channels; aaudiomp3param->eformat =(OMX_AUDIO_MP3STREAMFORMATTYPE)iMP3DecExt->version; *aresizeflag=omx_true; *ainbufsize -= imp3decext->inputbufferusedlength; if (0==*aInBufSize) iinputusedlength=0; 25

26 iinputusedlength += imp3decext->inputbufferusedlength; if ((aaudiomp3param->nsamplerate==(uint32)imp3decext->samplingrate) && (aaudiomp3param->nchannels ==(uint32)imp3decext->num_channels) && (aaudiomp3param->eformat ==(OMX_AUDIO_MP3STREAMFORMATTYPE)iMP3DecExt->version)) *aoutputlength=imp3decext->outputframesize; /* imp3decext->outputframesize=(aaudiomp3param->eformat)? 576 : 1152; imp3decext->outputframesize=(aaudiomp3param->nchannels==1)? imp3decext->outputframesize : (imp3decext->outputframesize << 1); *aoutputlength=imp3decext->outputframesize; iaudiomp3decoder->resetdecoderl(); if (Status==MP3DEC_INVALID_FRAME) *ainbufsize=0; iinputusedlength=0; *aoutputlength=0; iaudiomp3decoder->resetdecoderl(); if (Status==MP3DEC_INCOMPLETE_FRAME) *ainputbuf += iinputusedlength; imp3decext->inputbufferusedlength=0; iinputusedlength=0; *aoutputlength=0; if (Status==MP3DEC_OUTPUT_BUFFER_TOO_SMALL) *ainputbuf += iinputusedlength; imp3decext->inputbufferusedlength=0; iinputusedlength=0; *aoutputlength=0; *ainputbuf += iinputusedlength; iinputusedlength=0; *aoutputlength=0; (*aframecount)++; return Status; MP3 的解码实现位于 mp3_dec.cpp 文件中, 与 MP3 相关的文件解析器实现位于 mp3parser.cpp 文件中 MP3 的时间戳实现位于 mp3_timestamp.cpp 文件中 联系方式 26

27 集团官网 : 嵌入式学院 : 移动互联网学院 : 企业学院 : 物联网学院 : 研发中心 :dev.hqyj.com 集团总部地址 : 北京市海淀区西三旗悦秀路北京明园大学校内华清远见教育集团 北京地址 : 北京市海淀区西三旗悦秀路北京明园大学校区, 电话 : /5 上海地址 : 上海市徐汇区漕溪路银海大厦 A 座 8 层, 电话 : 深圳地址 : 深圳市龙华新区人民北路美丽 AAA 大厦 15 层, 电话 : 成都地址 : 成都市武侯区科华北路 99 号科华大厦 6 层, 电话 : 南京地址 : 南京市白下区汉中路 185 号鸿运大厦 10 层, 电话 : 武汉地址 : 武汉市工程大学卓刀泉校区科技孵化器大楼 8 层, 电话 : 西安地址 : 西安市高新区高新一路 12 号创业大厦 D3 楼 5 层, 电话 :

audiogram3 Owners Manual

audiogram3 Owners Manual USB AUDIO INTERFACE ZH 2 AUDIOGRAM 3 ( ) * Yamaha USB Yamaha USB ( ) ( ) USB Yamaha (5)-10 1/2 AUDIOGRAM 3 3 MIC / INST (XLR ) (IEC60268 ): 1 2 (+) 3 (-) 2 1 3 Yamaha USB Yamaha Yamaha Steinberg Media

More information

TD

TD *TD-000212-05* 20- 应用实例 4 本例显示的是使用两个亚低 音扬声器和多个顶箱的双声 道 立体声 设置 除了各声道都增加了一个顶 箱外 也可以增加更多的顶 箱 本例和例 3 的情况一 致 声道 2 或 右声道 声道 1 或 左声道 要接到更多的顶箱 将最后 一个顶箱的全幅线路输出接 头处的线缆接到下一个顶箱 的全幅线路输入接头 在不 降低信号质量的情况下 最

More information

<4D F736F F D20B5DA32D5C220416E64726F6964BFAAB7A2BBB7BEB3B4EEBDA82E646F6378>

<4D F736F F D20B5DA32D5C220416E64726F6964BFAAB7A2BBB7BEB3B4EEBDA82E646F6378> Android 应用程序开发与典型案例 作者 : 华清远见 第 2 章 Android 开发环境搭建 本章简介 本章主要介绍在 Windows 环境下,Android 开发环境的搭建步骤及注意事项, 包括 JDK 和 Java 开发环境的安装和配置 Eclipse 的安装 Android SDK 和 ADT 的安装和配置等 ; 同时介绍了 Android 开发的基本步骤 2.1 Android 开发环境的安装与配置

More information

Agilent N5700 N5741A-49A, N5750A-52A, N5761A-69A, N5770A-72A W 1500 W 600 V 180 A 1 U Vac AC LAN,USB GPIB Agilent N5700 1U 750W 1500W 24

Agilent N5700 N5741A-49A, N5750A-52A, N5761A-69A, N5770A-72A W 1500 W 600 V 180 A 1 U Vac AC LAN,USB GPIB Agilent N5700 1U 750W 1500W 24 Agilent N700 N71A-9A, N70A-2A, N761A-69A, N770A-72A 2 70 W 100 W 600 V 180 A 1 U 8-26 Vac AC LAN,USB GPIB Agilent N700 1U 70W 100W 2 6V 600V 1.A 180A N700 1U 19 100W LED N700 OVP UVL UVL OVP N700 GPIB

More information

認 識 聲 音 的 原 理 人 們 靠 耳 朵 聽 到 外 在 聲 音 Jingo C. Liao 廖 正 宏 P 3 認 識 聲 音 的 原 理 聲 音 是 如 何 產 生 的? 聲 音 的 產 生 起 因 於 物 體 振 動 鼓 聲 由 鼓 面 振

認 識 聲 音 的 原 理 人 們 靠 耳 朵 聽 到 外 在 聲 音 Jingo C. Liao 廖 正 宏 P 3 認 識 聲 音 的 原 理 聲 音 是 如 何 產 生 的? 聲 音 的 產 生 起 因 於 物 體 振 動 鼓 聲 由 鼓 面 振 第 十 四 章 多 媒 體 : 聲 音 Reporter : Jingo C. Liao 廖 正 宏 E-mail : jingo@mail.tku.edu.tw 章 節 列 表 1. 認 識 聲 音 的 原 理 2. 認 識 聲 音 的 形 式 3. Jingo C. Liao 廖 正 宏 P 2 1 認 識 聲 音 的 原 理 人 們 靠 耳 朵

More information

CC213

CC213 : (Ken-Yi Lee), E-mail: feis.tw@gmail.com 49 [P.51] C/C++ [P.52] [P.53] [P.55] (int) [P.57] (float/double) [P.58] printf scanf [P.59] [P.61] ( / ) [P.62] (char) [P.65] : +-*/% [P.67] : = [P.68] : ,

More information

WaveCN 使用手册及教程

WaveCN 使用手册及教程 WaveCN WaveCN 2.0.0.5 (c) 1999-2005 http://www.wavecn.com 2005-04-06 1 30 (Applets) 2 30 1. WaveCN... 5 1.1 WaveCN?... 5 1.2 WaveCN...5 1.3... 6 1.4... 6 2. WaveCN... 7 2.1... 7... 7... 7... 7... 8...

More information

r_09hr_practical_guide_kor.pdf

r_09hr_practical_guide_kor.pdf PRACTICAL GUIDE TO THE EDIROL R-09HR 3 4 PRACTICAL GUIDE TO THE EDIROL R-09HR 5 Situation 1 6 1 2 3 PRACTICAL GUIDE TO THE EDIROL R-09HR WAV MP3 WAV 24 bit/96 khz WAV 16 bit/44.1 khz MP3 128 kbps/44.1

More information

Audio/Smartphone accessories Training - Plan Proposal

Audio/Smartphone accessories Training - Plan Proposal STM32 音频应用 STM32 USB 音频应用 USB 音箱 音频编码 (WAV,MP3) 音频解码 (WAV,MP3,WMA,AAC) ipod Docking Android Docking 软件升级 (U_disk) STM32 其它音频应用 DSP 一些其它免费的编码和解码 Sound bar Smart Phone 音频开发板 ST 现有的音频应用 2 DMA USB 音箱 3 通用的应用

More information

MPEG AVS AV AVS:JVT AVS

MPEG AVS AV AVS:JVT AVS AVS 2003 7 30 MPEG AVS AV AVS:JVT AVS HPA Customer site A HPA Customer site B Harmonic Enterprise 1 Customer site C / (MPEG, H26x, AVS) (ISMA) DVB DVD (S/C/T) (TCP/IP) MPEG MPEG VCD: MPEG-1(ISO/IEC 11172)

More information

User ID 150 Password - User ID 150 Password Mon- Cam-- Invalid Terminal Mode No User Terminal Mode No User Mon- Cam-- 2

User ID 150 Password - User ID 150 Password Mon- Cam-- Invalid Terminal Mode No User Terminal Mode No User Mon- Cam-- 2 Terminal Mode No User User ID 150 Password - User ID 150 Password Mon- Cam-- Invalid Terminal Mode No User Terminal Mode No User Mon- Cam-- 2 Mon1 Cam-- Mon- Cam-- Prohibited M04 Mon1 Cam03 Mon1 Cam03

More information

简 介 关 于 本 说 明 书 将 来 本 文 件 的 内 容 如 有 变 更 恕 不 预 先 通 知 有 关 产 品 名 称 和 机 型 号 码 的 最 新 信 息 请 联 系 我 们 的 顾 客 支 持 中 心 详 细 使 用 说 明 书 中 使 用 的 液 晶 显 示 器 和 主 机 的 插

简 介 关 于 本 说 明 书 将 来 本 文 件 的 内 容 如 有 变 更 恕 不 预 先 通 知 有 关 产 品 名 称 和 机 型 号 码 的 最 新 信 息 请 联 系 我 们 的 顾 客 支 持 中 心 详 细 使 用 说 明 书 中 使 用 的 液 晶 显 示 器 和 主 机 的 插 MULTI-TRACK LINEAR PCM RECORDER LS-100 多 曲 目 线 性 PCM 录 音 机 详 细 使 用 说 明 书 感 谢 您 购 买 本 录 音 机 请 阅 读 本 手 册 以 正 确 及 安 全 的 使 用 本 产 品 请 将 手 册 保 存 在 方 便 取 阅 之 处, 以 便 作 为 日 后 之 参 考 为 确 保 能 成 功 的 录 音, 我 们 建 议 您

More information

SA1MXX Chinese user manual

SA1MXX Chinese user manual Register your product and get support at www.philips.com/welcome SA1MXX02B SA1MXX02KN SA1MXX02K SA1MXX04KN SA1MXX02W SA1MXX04B SA1MXX04K SA1MXX04P SA1MXX04W SA1MXX04WS SA1MXX08K 1 2 2 3 2 Digital Audio

More information

(Guangzhou) AIT Co, Ltd V 110V [ ]! 2

(Guangzhou) AIT Co, Ltd V 110V [ ]! 2 (Guangzhou) AIT Co, Ltd 020-84106666 020-84106688 http://wwwlenxcn Xi III Zebra XI III 1 (Guangzhou) AIT Co, Ltd 020-84106666 020-84106688 http://wwwlenxcn 230V 110V [ ]! 2 (Guangzhou) AIT Co, Ltd 020-84106666

More information

DIGITAL VOICE RECORDER WS-33M WS-3M WS-3M CN 6 8 9 8 7 9 9 3 6 7 3 ................................................................................................ ........................................................................

More information

untitled

untitled 2006 6 Geoframe Geoframe 4.0.3 Geoframe 1.2 1 Project Manager Project Management Create a new project Create a new project ( ) OK storage setting OK (Create charisma project extension) NO OK 2 Edit project

More information

行业

行业 PCI-1727U 快 速 安 装 使 用 手 册 PCI-1727U 快 速 安 装 使 用 手 册... 1 第 一 章 产 品 介 绍... 2 1.1 概 述...2 1.1.1 即 插 即 用 功 能...2 1.1.2 灵 活 的 电 压 输 出 范 围...2 1.1.3 板 卡 ID...2 1.2 特 点 :...2 1.3 选 型 指 导...2 第 二 章 安 装 与 测 试...

More information

概述

概述 OPC Version 1.6 build 0910 KOSRDK Knight OPC Server Rapid Development Toolkits Knight Workgroup, eehoo Technology 2002-9 OPC 1...4 2 API...5 2.1...5 2.2...5 2.2.1 KOS_Init...5 2.2.2 KOS_InitB...5 2.2.3

More information

F515_CS_Book.book

F515_CS_Book.book /USB , ( ) / L R 1 > > > 2, / 3 L 1 > > > 2 + - 3, 4 L 1 了解显示屏上显示的图标 Wap 信箱收到一条 Wap push 信息 ( ) GSM 手机已连接到 GSM 网络 指示条越多, 接收质量越好 2 ...........................4.............................. 4 Micro SD (

More information

Microsoft Word - 第1章 Android基本概念.docx

Microsoft Word - 第1章 Android基本概念.docx Android 系 统 下 Java 编 程 详 解 作 者 : 华 清 远 见 第 1 章 Android 基 本 概 念 本 章 简 介 本 章 主 要 介 绍 Android 基 本 概 念 方 面 的 内 容, 包 括 Android 平 台 特 性 Android 系 统 架 构 Android 开 发 框 架 和 Android 开 发 环 境 搭 建 1.1 Android 简 介 Android

More information

您 對 本 產 品 的 選 擇 充 分 顯 示 了 您 對 音 響 設 備 的 精 通, 我 們 十 分 感 謝 您 的 惠 顧, 並 為 本 公 司 提 供 優 質 產 品 一 貫 傳 統 而 感 到 無 比 的 自 豪 為 使 您 的 裝 置 與 使 用 能 得 到 最 好 的 發 揮, 我 們

您 對 本 產 品 的 選 擇 充 分 顯 示 了 您 對 音 響 設 備 的 精 通, 我 們 十 分 感 謝 您 的 惠 顧, 並 為 本 公 司 提 供 優 質 產 品 一 貫 傳 統 而 感 到 無 比 的 自 豪 為 使 您 的 裝 置 與 使 用 能 得 到 最 好 的 發 揮, 我 們 NT-503 USB DAC/Network Player 關 於 此 機 器 的 網 路 功 能, 請 看 網 路 說 明 書 使 用 者 說 明 書 與 網 路 說 明 書 可 以 從 TEAC Global Site (http://www.teac-global.com/) 下 載 USB D/A 轉 換 器 / 網 路 播 放 機 使 用 說 明 書 欲 播 放 USB 快 閃 記 憶 體

More information

03 最 新 計 算 機 概 論 3-1 文 字 表 示 法 (multimedia) (text) (image) (audio) (video) (text) (bit pattern) 01010101 11111111 ASCII (American Standard Code for In

03 最 新 計 算 機 概 論 3-1 文 字 表 示 法 (multimedia) (text) (image) (audio) (video) (text) (bit pattern) 01010101 11111111 ASCII (American Standard Code for In 03 最 新 計 算 機 概 論 3-1 3-2 3-3 3-4 3-5 3-6 03 最 新 計 算 機 概 論 3-1 文 字 表 示 法 (multimedia) (text) (image) (audio) (video) (text) (bit pattern) 01010101 11111111 ASCII (American Standard Code for Information

More information

Symbian多媒体架构分析

Symbian多媒体架构分析 多媒体应用开发 要内容 多媒体框架 (MMF) 客户端 API 音频程序开发视频程序开发摄像头使用 媒体框架 (MMF) 客户端 API 放音调 播放音调 (1) 指定周期和频率的简单声音 (2)DTMF( 双音多频 ) 电话信号声音 (3) 存储在文件或描述中的声音序列 (4) 在手机中的预定义的声音序列 放音调 框架 放音调 播放音调工具类 CMdaAudioToneUtility 侦听器接口类

More information

MATLAB 1

MATLAB 1 MATLAB 1 MATLAB 2 MATLAB PCI-1711 / PCI-1712 MATLAB PCI-1711 / PCI-1712 MATLAB The Mathworks......1 1...........2 2.......3 3................4 4. DAQ...............5 4.1. DAQ......5 4.2. DAQ......6 5.

More information

目录 1. RK 支持的编解码类型 头文件与库文件 结构体介绍 编解码枚举定义 编解码结构体定义 解码调用流程 解码创建过程 解码过程 解码销毁过程

目录 1. RK 支持的编解码类型 头文件与库文件 结构体介绍 编解码枚举定义 编解码结构体定义 解码调用流程 解码创建过程 解码过程 解码销毁过程 vpu_api.h 接口说明文档 1 目录 1. RK 支持的编解码类型... 3 2. 头文件与库文件... 3 3. 结构体介绍... 3 3.1 编解码枚举定义... 3 3.2 编解码结构体定义... 5 4. 解码调用流程... 8 4.1 解码创建过程... 8 4.2 解码过程... 9 4.3 解码销毁过程... 9 5. 编码调用流程...10 5.1 编码创建过程...10 5.2

More information

Cover-YP-35-ch

Cover-YP-35-ch AH68-01283C (Rev 0.0) PC USB USB CD Ripper yepp MP3 EQ File Direct Play DISPLAY BACK LIGHT BEEP CONTRAST SCROLL SPEED POWER OFF TIME DEFAULT VOLUME WOW LEVEL ENCODE MENU yepp 2 SRS 3 0 0 35-5/ 0 0 0 /

More information

第 3 章 数 据 在 计 算 机 中 的 表 示 43 在 进 位 计 数 制 中 有 数 码 数 位 ( 位 置 ) 基 数 和 位 权 等 用 语 数 码 是 在 一 个 计 数 制 中 用 来 表 示 数 值 的 符 号 ; 数 位 是 指 数 码 在 一 个 数 中 所 处 的 位 置 ;

第 3 章 数 据 在 计 算 机 中 的 表 示 43 在 进 位 计 数 制 中 有 数 码 数 位 ( 位 置 ) 基 数 和 位 权 等 用 语 数 码 是 在 一 个 计 数 制 中 用 来 表 示 数 值 的 符 号 ; 数 位 是 指 数 码 在 一 个 数 中 所 处 的 位 置 ; 第 3 章 数 据 在 计 算 机 中 的 表 示 3.1 数 据 与 数 制 计 算 机 中 使 用 的 数 据 一 般 可 以 分 为 两 大 类 : 数 值 数 据 和 字 符 数 据 数 值 数 据 常 用 于 表 示 数 的 大 小 与 正 负 ; 字 符 数 据 则 用 于 表 示 非 数 值 的 信 息, 例 如 : 英 文 汉 字 图 形 和 语 音 等 数 据 数 据 在 计 算

More information

PL600 IPPBX 用户手册_V2.0_.doc

PL600 IPPBX 用户手册_V2.0_.doc VoIP 网 络 交 换 机 PL-600 IPPBX 用 户 手 册 深 圳 普 联 讯 电 子 科 技 有 限 公 司 版 权 所 有 2009 深 圳 市 普 联 讯 电 子 科 技 有 限 公 司 第 1 共 1 目 录 1. 前 言...3 2. 安 装 前 准 备...3 3. 硬 件 安 装...4 4. 登 陆 及 一 般 操 作 介 绍...4 5. 基 本 配 置...6 6.

More information

Microsoft Word - fm.doc

Microsoft Word - fm.doc 多 媒 体 技 术 毕 业 设 计 指 导 与 案 例 分 析 贺 雪 景 杨 平 高 幼 年 编 著 清 华 大 学 出 版 社 北 京 内 容 简 介 本 书 通 过 六 个 案 例 介 绍 了 多 媒 体 专 业 毕 业 设 计 项 目 的 开 发, 包 括 使 用 Authorware 开 发 的 模 拟 型 课 件, 使 用 FrontPage2003 和 ASP 开 发 的 网 络 类

More information

ARM JTAG实时仿真器安装使用指南

ARM JTAG实时仿真器安装使用指南 ARM JTAG Version 1.31 2003. 11. 12 ARM JTAG ARM JTAG.3 ARM 2.1.4 2.2.4 ARM JTAG 3.1 18 3.2 18 3.2.1 Multi-ICE Server.18 3.2.2 ADS..21 ARM JTAG 4.1 Multi-ICE Server 33 4.1.1 Multi-ICE Server..... 33 4.1.2

More information

54 15 ipod/iphone/mp3/psp/pda

54 15 ipod/iphone/mp3/psp/pda 54 15 ipod/iphone/mp3/psp/pda 21 38 35 PCuSER Contents Part 1...11 Trick 01...12 Trick 02...14 Trick 03...18 Trick 04...19 Trick 05 DVD-R/RW...21 Trick 06 DVD+R/RW...22 Trick 07 DVD-RAM...23 Trick 08 Doubler

More information

Microsoft Word - PHP7Ch01.docx

Microsoft Word - PHP7Ch01.docx PHP 01 1-6 PHP PHP HTML HTML PHP CSSJavaScript PHP PHP 1-6-1 PHP HTML PHP HTML 1. Notepad++ \ch01\hello.php 01: 02: 03: 04: 05: PHP 06:

More information

Bus Hound 5

Bus Hound 5 Bus Hound 5.0 ( 1.0) 21IC 2007 7 BusHound perisoft PC hound Bus Hound 6.0 5.0 5.0 Bus Hound, IDE SCSI USB 1394 DVD Windows9X,WindowsMe,NT4.0,2000,2003,XP XP IRP Html ZIP SCSI sense USB Bus Hound 1 Bus

More information

HD ( ) 18 HD ( ) 18 PC 19 PC 19 PC 20 Leica MC170 HD Leica MC190 HD 22 Leica MC170 HD Leica MC190 HD Leica MC170 HD

HD ( ) 18 HD ( ) 18 PC 19 PC 19 PC 20 Leica MC170 HD Leica MC190 HD 22 Leica MC170 HD Leica MC190 HD Leica MC170 HD Leica MC170 HD Leica MC190 HD 5 6 7 8 11 12 13 14 16 HD ( ) 18 HD ( ) 18 PC 19 PC 19 PC 20 Leica MC170 HD Leica MC190 HD 22 Leica MC170 HD Leica MC190 HD 22 23 24 26 Leica MC170 HD Leica MC190 HD ( ) 28

More information

OK dvp5990k_93_cs.indd :41:08

OK dvp5990k_93_cs.indd :41:08 56......... dvp5990k_93_cs.indd 56 2008-3-25 16:41:08 57............ OK............ dvp5990k_93_cs.indd 57 2008-3-25 16:41:08 58 dvp5990k_93_cs.indd 58 2008-3-25 16:41:09 DVD 1 2 3 4 5 6 7 8 9 a 1 f u

More information

问 调 用 云 端 的 语 音 服 务 的 接 口 形 式, 对 规 范 语 音 识 别 服 务 提 供 方 式, 方 便 客 户 端 的 集 成 调 用, 从 而 促 进 语 音 交 互 应 用 的 推 广 发 展, 促 进 广 大 用 户 充 分 享 受 到 语 音 交 互 带 来 的 快 速

问 调 用 云 端 的 语 音 服 务 的 接 口 形 式, 对 规 范 语 音 识 别 服 务 提 供 方 式, 方 便 客 户 端 的 集 成 调 用, 从 而 促 进 语 音 交 互 应 用 的 推 广 发 展, 促 进 广 大 用 户 充 分 享 受 到 语 音 交 互 带 来 的 快 速 国 家 标 准 中 文 语 音 识 别 互 联 网 服 务 接 口 规 范 ( 征 求 意 见 稿 ) 编 制 说 明 一 工 作 简 况 1 任 务 来 源 按 照 国 家 标 准 化 管 理 委 员 会 2014 年 第 一 批 国 家 标 准 制 修 订 计 划 安 排, 国 家 标 准 制 定 项 目 中 文 语 音 识 别 互 联 网 服 务 接 口 规 范 ( 征 求 意 见 稿 ) 计

More information

Chapter #

Chapter # 第三章 TCP/IP 协议栈 本章目标 通过本章的学习, 您应该掌握以下内容 : 掌握 TCP/IP 分层模型 掌握 IP 协议原理 理解 OSI 和 TCP/IP 模型的区别和联系 TCP/IP 介绍 主机 主机 Internet TCP/IP 早期的协议族 全球范围 TCP/IP 协议栈 7 6 5 4 3 应用层表示层会话层传输层网络层 应用层 主机到主机层 Internet 层 2 1 数据链路层

More information

dvp3258_93_cs.indd :35:27

dvp3258_93_cs.indd :35:27 50...... dvp3258_93_cs.indd 50 2008-3-27 13:35:26 51...... 74...75... 75 dvp3258_93_cs.indd 51 2008-3-27 13:35:27 52 dvp3258_93_cs.indd 52 2008-3-27 13:35:27 DVD 1 2 3 4 5 6 7 8 a STANDBY-ON f PLAY/PAUSE

More information

OK dvp3266k_93_cs.indd :43:44

OK dvp3266k_93_cs.indd :43:44 52........... dvp3266k_93_cs.indd 52 2008-3-27 9:43:43 53............... OK.................. dvp3266k_93_cs.indd 53 2008-3-27 9:43:44 54 dvp3266k_93_cs.indd 54 2008-3-27 9:43:44 DVD 8 9 10 a sdbn f plpuseu

More information

untitled

untitled 1 行 行 行 行.NET 行 行 類 來 行 行 Thread 類 行 System.Threading 來 類 Thread 類 (1) public Thread(ThreadStart start ); Name 行 IsAlive 行 行狀 Start 行 行 Suspend 行 Resume 行 行 Thread 類 (2) Sleep 行 CurrentThread 行 ThreadStart

More information

C/C++ - 文件IO

C/C++ - 文件IO C/C++ IO Table of contents 1. 2. 3. 4. 1 C ASCII ASCII ASCII 2 10000 00100111 00010000 31H, 30H, 30H, 30H, 30H 1, 0, 0, 0, 0 ASCII 3 4 5 UNIX ANSI C 5 FILE FILE 6 stdio.h typedef struct { int level ;

More information

ebook64-1

ebook64-1 1 Internet Protocol, IPI P (voice over IPVo I P ) (packetized voice) (Internet telephony) Vo I P Vo I I P I n t e r n e ti n t e r n e t s 1.1 Vo I P I (IP telephony) p a c k e t - v o i c e I P 1.2 I

More information

EC51/52 GSM /GPRS MODEN

EC51/52 GSM /GPRS MODEN EC51/52 GSM /GPRS MODEN AT SMS aoe EC66.com 2004.11 ... 2 1 GSM AT... 3 2 EC51... 4 3 PDU... 4 4 PDU... 5 5... 7 6 TEXT... 8 7... 9 8.... 9 9.... 9 http://www.ec66.com/ 1 AT GPRS Modem SMS AT EC51 EC52

More information

Outline Speech Signals Processing Dual-Tone Multifrequency Signal Detection 云南大学滇池学院课程 : 数字信号处理 Applications of Digital Signal Processing 2

Outline Speech Signals Processing Dual-Tone Multifrequency Signal Detection 云南大学滇池学院课程 : 数字信号处理 Applications of Digital Signal Processing 2 CHAPTER 10 Applications of Digital Signal Processing Wang Weilian wlwang@ynu.edu.cn School of Information Science and Technology Yunnan University Outline Speech Signals Processing Dual-Tone Multifrequency

More information

QL1880new2.PDF

QL1880new2.PDF ADSL Modem 1 MODEM 56K MODEM 128K ISDN INTERNET ADSL Modem VOD ADSL ADSL 2 1.1 ADSL 1.2 1.3 KM300A 2.1 2.2 2.3 2.4 2.5 KM300A 2.6 web 2.7 1.1ADSL 1.2 1.3 2.1 ADSL 2.2 ADSL 3 ADSL KM300A ADSL KM300A DIY

More information

29 0. 0.1 0.2 0.3 1. 30 1840 1930 1932 1926 35 51 55 214 1 31 1988 3 2. 2.1 3 2000 2.2 79 1 52 32 56 57 57 2 2.3. 2 10 4 40 16 4 64 2.4 3. 3.0 3.1 1 Hz 33 193ms 176 174 169 167 165 163 162 160 159 (T )

More information

新版 明解C++入門編

新版 明解C++入門編 511!... 43, 85!=... 42 "... 118 " "... 337 " "... 8, 290 #... 71 #... 413 #define... 128, 236, 413 #endif... 412 #ifndef... 412 #if... 412 #include... 6, 337 #undef... 413 %... 23, 27 %=... 97 &... 243,

More information

OSI OSI 15% 20% OSI OSI ISO International Standard Organization 1984 OSI Open-data System Interface Reference Model OSI OSI OSI OSI ISO Prototype Prot

OSI OSI 15% 20% OSI OSI ISO International Standard Organization 1984 OSI Open-data System Interface Reference Model OSI OSI OSI OSI ISO Prototype Prot OSI OSI OSI 15% 20% OSI OSI ISO International Standard Organization 1984 OSI Open-data System Interface Reference Model OSI OSI OSI OSI ISO Prototype Protocol OSI OSI OSI OSI OSI O S I 2-1 Application

More information

GV-R7500L Win 98/ 98SE, WinME Win XP Direct X Windows NT WINDO

GV-R7500L Win 98/ 98SE, WinME Win XP Direct X Windows NT WINDO Chapter 2 GIGA-BYTE TECHNOLOGY CO, LTD (GBT ) GBT GBT, GBT 2002 10 31-1 - 1 11 3 12 GV-R7500L 3 2 21 4 22 5 23 6 3 31 Win 98/ 98SE, WinME Win XP 8 311 8 312 Direct X 9 313 11 314 15 315 15 316 22 32 Windows

More information

目 录 如 何 阅 读 本 说 明 书! 感 谢 您 惠 购 先 锋 产 品 务 必 阅 读 本 说 明 书 和 使 用 说 明 书 ( 快 速 入 门 ) 它 们 都 包 含 使 用 本 产 品 之 前 必 须 了 解 的 重 要 信 息! 在 本 手 册 中, 产 品 上 所 示 的 声 道 和

目 录 如 何 阅 读 本 说 明 书! 感 谢 您 惠 购 先 锋 产 品 务 必 阅 读 本 说 明 书 和 使 用 说 明 书 ( 快 速 入 门 ) 它 们 都 包 含 使 用 本 产 品 之 前 必 须 了 解 的 重 要 信 息! 在 本 手 册 中, 产 品 上 所 示 的 声 道 和 XDJ-RX http://pioneerdj.com/support/ http://rekordbox.com/ 目 录 如 何 阅 读 本 说 明 书! 感 谢 您 惠 购 先 锋 产 品 务 必 阅 读 本 说 明 书 和 使 用 说 明 书 ( 快 速 入 门 ) 它 们 都 包 含 使 用 本 产 品 之 前 必 须 了 解 的 重 要 信 息! 在 本 手 册 中, 产 品 上 所 示

More information

百色人才网事业单位百色市中级人民法院2013年招聘人员工作公告招聘

百色人才网事业单位百色市中级人民法院2013年招聘人员工作公告招聘 百 色 人 才 网 事 业 单 位 百 色 市 中 级 人 民 法 院 2013 年 招 聘 人 员 工 作 公 告 招 聘 www.hwpyp.com http://www.hwpyp.com 百 色 人 才 网 事 业 单 位 百 色 市 中 级 人 民 法 院 2013 年 招 聘 人 员 工 作 公 告 招 聘 经 市 政 府 许 诺, 为 进 一 步 运 用 社 会 优 良 人 力 资 源

More information

X713_CS_Book.book

X713_CS_Book.book / / /USB ) ; ; C D ; ; B B 1 >> 2 3 B 1 ( > > ) 了解显示屏上显示的图标 Wap 信箱收到一条 Wap push 信息 GSM GPS ( ) 手机已连接到 GSM 网络 指示条越多, 接收质量越好 GPS 2 ...........................4.............................. 4 Micro SD (

More information

/ 212ºF (100ºC) 2 UL CR2032 DL2032 3 Wave SoundTouch SoundTouch SoundTouch Bose / 3 Bose Corporation 1999/5/EC 32ºF (0 C) 113

/ 212ºF (100ºC) 2 UL CR2032 DL2032 3 Wave SoundTouch SoundTouch SoundTouch Bose / 3 Bose Corporation 1999/5/EC  32ºF (0 C) 113 Owner s Guide / 212ºF (100ºC) 2 UL CR2032 DL2032 3 Wave SoundTouch SoundTouch SoundTouch Bose / 3 Bose Corporation 1999/5/EC www.bose.com/compliance. 32ºF (0 C) 113ºF (45 C) 1 EN/IEC 60825 CD 1 1 CLASS

More information

Microsoft Word - MSP430 Launchpad 指导书.docx

Microsoft Word - MSP430 Launchpad 指导书.docx Contents 3... 9... 14 MSP430 LAUNCHPAD 指导书 3 第一部分第一个工程 New Project File > New > CCS Project Project name: ButtonLED Device>Family: MSP430 Variant: MSP430G2553 Project templates and examples : Empty Project

More information

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 月 3 日 1 1 INPUTOUTPUT 1 InputOutput 题目描述 用 cin 输入你的姓名 ( 没有空格 ) 和年龄 ( 整数 ), 并用 cout 输出 输入输出符合以下范例 输入 master 999 输出 I am master, 999 years old. 注意 "," 后面有一个空格,"." 结束,

More information

untitled

untitled 1 Outline 數 料 數 數 列 亂數 練 數 數 數 來 數 數 來 數 料 利 料 來 數 A-Z a-z _ () 不 數 0-9 數 不 數 SCHOOL School school 數 讀 school_name schoolname 易 不 C# my name 7_eleven B&Q new C# (1) public protected private params override

More information

前 言 版 权 2014 Vivitek Corporation. 是 Vivitek Corporation 的 商 标 其 他 商 标 是 其 各 自 所 有 者 的 资 产 值 重 量 和 尺 寸 等 均 为 近 似 值 规 格 如 有 变 更, 恕 不 另 行 通 知 免 责 声 明 本 文

前 言 版 权 2014 Vivitek Corporation. 是 Vivitek Corporation 的 商 标 其 他 商 标 是 其 各 自 所 有 者 的 资 产 值 重 量 和 尺 寸 等 均 为 近 似 值 规 格 如 有 变 更, 恕 不 另 行 通 知 免 责 声 明 本 文 前 言 版 权 2014 Vivitek Corporation. 是 Vivitek Corporation 的 商 标 其 他 商 标 是 其 各 自 所 有 者 的 资 产 值 重 量 和 尺 寸 等 均 为 近 似 值 规 格 如 有 变 更, 恕 不 另 行 通 知 免 责 声 明 本 文 档 中 的 信 息 如 有 变 更, 恕 不 另 行 通 知 制 造 商 对 于 本 文 档 中 的

More information

C6_ppt.PDF

C6_ppt.PDF C01-202 1 2 - (Masquerade) (Replay) (Message Modification) (Denial of Service) - ( ) (Eavesdropping) (Traffic Analysis) 8 1 2 7 3 6 5 4 3 - TCP SYN (SYN flood) Smurf Ping of Death LAND Attack Teardrop

More information

ICD ICD ICD ICD ICD

ICD ICD ICD ICD ICD MPLAB ICD2 MPLAB ICD2 PIC MPLAB-IDE V6.0 ICD2 usb PC RS232 MPLAB IDE PC PC 2.0 5.5V LED EEDATA MPLAB ICD2 Microchip MPLAB-IDE v6.0 Windows 95/98 Windows NT Windows 2000 www.elc-mcu.com 1 ICD2...4 1.1 ICD2...4

More information

ViewStick 2_UG_TC.pdf

ViewStick 2_UG_TC.pdf ViewStick 2 Wireless Presentation Gateway : VS16704 ViewSonic ViewSonic 25 ViewSonic ViewSonic ViewSonic 50 C (122 F) 0 C (32 F) 35 C (95 F) FCC FCC FCC / FCC ID FCC ID: GSS-VS15989 FCC 15 (1) (2) FCC

More information

TC35短信发送程序设计

TC35短信发送程序设计 http://www.dragonsoft.net.cn/down/project/tc35_sms.rar TC35 AT /down/book/tc35_at.pdf TC35/TC35i GSM Modem TC35 GSM POS COM SIM DOWN COM E, vbcr AT VB6.0 1)C# http://www.yesky.com/softchannel/72342380468109312/20040523/1800310.shtml,

More information

GPS ET700 ET700 Microsoft Windows Mobile 6 GPS ET700, USB MHz GPS 256MB Flash 128MB RAM ET700 MSN Office ET QVGA ET700 2

GPS ET700 ET700 Microsoft Windows Mobile 6 GPS ET700, USB MHz GPS 256MB Flash 128MB RAM ET700 MSN Office ET QVGA ET700 2 :Lenovo ET700 1 GPS ET700 ET700 Microsoft Windows Mobile 6 GPS ET700, USB2.0 624MHz GPS 256MB Flash 128MB RAM ET700 MSN Office ET700 2.5 QVGA ET700 2 3 Lenovo 800-810-8888 400-818-8818 http://www.lenovomobile.com

More information

TX-NR3030_BAS_Cs_ indd

TX-NR3030_BAS_Cs_ indd TX-NR3030 http://www.onkyo.com/manual/txnr3030/adv/cs.html Cs 1 2 3 Speaker Cable 2 HDMI OUT HDMI IN HDMI OUT HDMI OUT HDMI OUT HDMI OUT 1 DIGITAL OPTICAL OUT AUDIO OUT TV 3 1 5 4 6 1 2 3 3 2 2 4 3 2 5

More information

Open topic Bellman-Ford算法与负环

Open topic   Bellman-Ford算法与负环 Open topic Bellman-Ford 2018 11 5 171860508@smail.nju.edu.cn 1/15 Contents 1. G s BF 2. BF 3. BF 2/15 BF G Bellman-Ford false 3/15 BF G Bellman-Ford false G c = v 0, v 1,..., v k (v 0 = v k ) k w(v i 1,

More information

untitled

untitled XP248 1 XP248 XP248 DCS PLC SCnet SCnet DCS SCnet DCS 1.1 XP248 Modbus HostLink Modbus XP248 4 DB25 XP248 MODBUS XP248 SCControl XP248 4 RS232 RS485 4 32 XP248 COM0-COM1 COM2-COM3 1200 19200bit/s 5 8 1

More information

BYOD IP+Optical (IP NGN) API 4. End-to-End (Service Aware) 5. IP NGN (IP Next Generation Network) ( ) Prime Carrier Management Access Edge Co

BYOD IP+Optical (IP NGN) API 4. End-to-End (Service Aware) 5. IP NGN (IP Next Generation Network) ( ) Prime Carrier Management Access Edge Co BYOD 228 2015 IT open source DIY ( ) Up/Down HP NNMi WhatsUp Gold Nagios HP SiteScope WhatsUp Gold HP NNMi WhatsUp Gold Cacti MRTG HP ispi Performance for Metrics WhatsUp Gold ( ) Open source Agent End-to-End

More information

C/C++ 语言 - 循环

C/C++ 语言 - 循环 C/C++ Table of contents 7. 1. 2. while 3. 4. 5. for 6. 8. (do while) 9. 10. (nested loop) 11. 12. 13. 1 // summing.c: # include int main ( void ) { long num ; long sum = 0L; int status ; printf

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 Hadoop 生 态 技 术 在 阿 里 全 网 商 品 搜 索 实 战 阿 里 巴 巴 - 王 峰 自 我 介 绍 真 名 : 王 峰 淘 宝 花 名 : 莫 问 微 博 : 淘 莫 问 2006 年 硕 士 毕 业 后 加 入 阿 里 巴 巴 集 团 淘 及 搜 索 事 业 部 ( 高 级 技 术 与 家 ) 目 前 负 责 搜 索 离 线 系 统 团 队 技 术 方 向 : 分 布 式 计 算

More information

2_dvdr3380_97_CT_21221b.indd

2_dvdr3380_97_CT_21221b.indd 64 65 66 ALL 3 67 a STANDBY-ON 2 a b c d e f g h i j k l b TIMER c SYSTEM-MENU d e SELECT f REC g. > h TOP MENU i ANGLE j RETURN k SUBTITLE l REC MODE 68 m n REC SOURCE o DISC-MENU p OK q EDIT r PLAYÉ

More information

q7-chinesisch

q7-chinesisch Audi Q7 使 用 书 Audi Q7 Chinesisch 11.2006 2006 AUDI AG 奥 迪 股 份 公 司 对 所 有 车 型 都 在 不 断 进 行 后 续 开 发 公 司 可 能 随 时 改 进 产 品 的 外 形 装 备 和 技 术, 因 此 请 您 谅 解 本 操 作 手 册 的 数 据 附 图 和 不 能 作 为 提 出 任 何 要 求 的 依 据 未 经 奥 迪

More information

Microsoft Word - 01.DOC

Microsoft Word - 01.DOC 第 1 章 JavaScript 简 介 JavaScript 是 NetScape 公 司 为 Navigator 浏 览 器 开 发 的, 是 写 在 HTML 文 件 中 的 一 种 脚 本 语 言, 能 实 现 网 页 内 容 的 交 互 显 示 当 用 户 在 客 户 端 显 示 该 网 页 时, 浏 览 器 就 会 执 行 JavaScript 程 序, 用 户 通 过 交 互 式 的

More information

untitled

untitled DOP www.deltaww.com DOP (RS232/RS485/ RS422) DOP USB SD 30 100 PLC Best Performance Huma Beautiful Display Beneficial Feature 1 DOP LED 65536 2D n Machine Interface s 2 DOP-B DOP-B 4.3 inches Wide B03S211

More information

AP128DG-H AP128DG-H 3 13 ATiRADEON TM Win 98/98SE, WinME Win XP Direct X

AP128DG-H AP128DG-H 3 13 ATiRADEON TM Win 98/98SE, WinME Win XP Direct X Chapter 2 GIGA-BYTE TECHNOLOGY CO, LTD ( GBT ) GBT GBT, GBT 2002 4 12 1 AP128DG-H 1 11 3 12 AP128DG-H 3 13 ATiRADEON TM 8500 4 2 21 5 22 6 23 7 3 31 Win 98/98SE, WinME Win XP 9 311 9 312 Direct X 10 313

More information

... 3... 4... 7... 9... 14... 20... 22... 23... 24... 25... 29... 29... 29... 30... 30... 30... 33... 33... 34... 36... 38... 39... 39... 42... 44 3 1 ... 44... 44... 45... 46 3 2 1. 2. 1997 11 14 2000

More information

专题一.ppt

专题一.ppt Android 核心入门分析 Jack.fan Copyright 2007-2008 Farsight. All rights reserved. 主要内容 : } 1 android 系统启动流程分析 } 2 android 系统 JNI 和 Binder 使用简介 } 3 android 系统输入子系统模型分析 1.1 android 系统启动流程分析 : } 1). } init 进程启动控制台进程

More information

eHELP_asia_TW_pro4-2(WT60W)_0415.indb

eHELP_asia_TW_pro4-2(WT60W)_0415.indb 請 先 讀 我 代 表 意 義 及 操 作 O K 方 塊 中 的 字 母 代 表 遙 控 器 按 鍵 Menu 青 綠 色 字 母 代 表 螢 幕 顯 示 項 目 此 e 導 覽 中 的 參 考 返 回 向 前 跳 至 選 單 項 目 本 e 導 覽 中 的 圖 示 僅 為 示 意 圖 觀 賞 我 的 首 頁 資 訊 我 的 首 頁 是 連 接 到 如 電 視 應 用 程 式 等 的 入 口 頁

More information

目 录 一 基 金 当 事 人... 4 二 基 金 的 依 据 目 的 和 原 则... 6 三 基 金 托 管 人 对 基 金 管 理 人 的 业 务 监 督 和 核 查... 7 四 基 金 管 理 人 对 基 金 托 管 人 的 业 务 核 查... 13 五 基 金 财 产 的 保 管..

目 录 一 基 金 当 事 人... 4 二 基 金 的 依 据 目 的 和 原 则... 6 三 基 金 托 管 人 对 基 金 管 理 人 的 业 务 监 督 和 核 查... 7 四 基 金 管 理 人 对 基 金 托 管 人 的 业 务 核 查... 13 五 基 金 财 产 的 保 管.. 基 金 管 理 人 : 金 元 惠 理 基 金 管 理 有 限 公 司 基 金 托 管 人 : 宁 波 银 行 股 份 有 限 公 司 目 录 一 基 金 当 事 人... 4 二 基 金 的 依 据 目 的 和 原 则... 6 三 基 金 托 管 人 对 基 金 管 理 人 的 业 务 监 督 和 核 查... 7 四 基 金 管 理 人 对 基 金 托 管 人 的 业 务 核 查... 13

More information

GIGA-BYTE TECHNOLOGY CO., LTD. ( GBT ) GBT GBT, GBT

GIGA-BYTE TECHNOLOGY CO., LTD. ( GBT ) GBT GBT, GBT GIGA-BYTE TECHNOLOGY CO., LTD. (GBT ) GBT GBT, GBT 2003 7 9 1. 1.1.... 3 1.2.... 3 2. 2.1.... 4 2.2.... 5 2.3.... 6 3. 3.1. Win98/98SE or WinME,Win2000Win XP... 8 3.1.1... 8 3.1.2 Direct X... 9 3.1.3...

More information

目 录 目 录 1. 安 装 和 快 速 入 门 附 件 1.1 随 机 附 件... 3 1.2 附 件 信 息... 3 连 接 和 设 定 1.3 连 接... 3 1.4 记 录 纸... 4 快 速 入 门 1.5 发 送 传 真 / 复 印... 5 1.6 接 收 传 真... 5 2

目 录 目 录 1. 安 装 和 快 速 入 门 附 件 1.1 随 机 附 件... 3 1.2 附 件 信 息... 3 连 接 和 设 定 1.3 连 接... 3 1.4 记 录 纸... 4 快 速 入 门 1.5 发 送 传 真 / 复 印... 5 1.6 接 收 传 真... 5 2 KX-FT832CN KX-FT836CN KX-FT836 感 谢 您 购 买 Panasonic 传 真 机 请 于 使 用 前 仔 细 阅 读 操 作 使 用 说 明 书, 并 妥 善 保 管 本 机 与 来 电 显 示 兼 容 您 必 须 向 服 务 供 应 商 / 电 话 公 司 申 请 并 取 得 相 应 的 服 务 目 录 目 录 1. 安 装 和 快 速 入 门 附 件 1.1 随

More information

03243AA_CH05.indd

03243AA_CH05.indd CHAPTER 5 週 資 訊 科 技 概 論 電 腦 的 週 邊 設 備 邊 設 備 泛 指 主 機 以 外 的 相 關 硬 體 設 備, 這 些 設 備 依 其 用 途, 可 區 分 為 輔 助 儲 存 設 備 ( 輔 助 記 憶 體 ) 輸 入 設 備 及 輸 出 設 備 等 3 大 類 ( 圖 5-1) 筆 記 型 電 腦 則 為 了 攜 帶 方 便, 會 將 常 用 的 週 邊 設 備 整

More information

IP505SM_manual_cn.doc

IP505SM_manual_cn.doc IP505SM 1 Introduction 1...4...4...4...5 LAN...5...5...6...6...7 LED...7...7 2...9...9...9 3...11...11...12...12...12...14...18 LAN...19 DHCP...20...21 4 PC...22...22 Windows...22 TCP/IP -...22 TCP/IP

More information

ebook39-6

ebook39-6 6 first-in-first-out, FIFO L i n e a r L i s t 3-1 C h a i n 3-8 5. 5. 3 F I F O L I F O 5. 5. 6 5. 5. 6.1 [ ] q u e n e ( r e a r ) ( f r o n t 6-1a A 6-1b 6-1b D C D 6-1c a) b) c) 6-1 F I F O L I F ADT

More information

1 音频功能 1.1 使用模式 IVR 呼叫中心的常见场景,SIP 电话接入后, 能够执行基于按键的菜单驱动 : 转码和交换 如下图, 不同编码的两个 SIP 呼叫可以通过本设备做转码后相互通话 媒体服务 将文件内容转编码或者不转编码送给远端的 SIP phone

1 音频功能 1.1 使用模式 IVR 呼叫中心的常见场景,SIP 电话接入后, 能够执行基于按键的菜单驱动 : 转码和交换 如下图, 不同编码的两个 SIP 呼叫可以通过本设备做转码后相互通话 媒体服务 将文件内容转编码或者不转编码送给远端的 SIP phone 毅航互联主机媒体处理平台 (HMP) 随着运营商平台的 IP 化和业务云化, 原来必须由专属芯片和 DSP 芯片实现的音视频处理功能, 也有往通用 CPU 和通用服务器上迁移的需求和趋势 毅航互联利用多年在专属芯片和 DSP 实现的积累, 将在 isx4000 硬件平台上实现的功能移植到通用 CPU 和通用服务器上, 产生 HMP 产品 毅航互联 HMP 产品提供与硬件平台类似的功能, 满足客户在全

More information

untitled

untitled Sansa Fuze TM MP3 1-866-SANDISK (726-3475) www.sandisk.com/techsupport www.sandisk.com/sansa Fuze-8UM-CHS ... 3... 4 Sansa Fuze TM... 6... 6... 7... 7 Sansa Fuze... 7... 8... 9... 9... 10... 11... 11...

More information

IONEER 10 IONEER SC-LX90 10 ICEpower 2 THX 9.2 VSX-AX10 THX Ultra 2 lus 7.1 MCACC THX AV ITU-R Dolby THX W 10 8 RMS 200W 7 8 RMS5Hz 100kHz

IONEER 10 IONEER SC-LX90 10 ICEpower 2 THX 9.2 VSX-AX10 THX Ultra 2 lus 7.1 MCACC THX AV ITU-R Dolby THX W 10 8 RMS 200W 7 8 RMS5Hz 100kHz AIR STUDIOS IONEER SC-LX90 94 2003 2 1 154 IONEER VSX-AX10i AV WM B&O ICEpower ioneer HD Audio IONEER SC-LX90 ICEpower LCM dts-hd MA Dolby TrueHD SC-LX90 IONEER Excellence EX IONEER AV SC-LX90 IONEER 10

More information

行业

行业 PCL-818HD/HG/L PCL-818HD/HG/L 1.1...2 1.1.1 /...2 1.1.2 ID...2 1.2...3 1.3...3 2.1...3 2.2...3 2.2.1...4 2.2.2...4 2.2.3 DMA...5 2.2.4...5 2.2.5 D/A...5 2.2.6...6 2.2.7 EXE.trigger GATE0...6 2.2.8 FIFO

More information

行业

行业 PCL-727 PCL-727 1.1...2 1.2...2 1.3...2 1.4...3 2.1...3 2.2...3 2.2.1...3 2.2.2...4 2.2.3...5 2.3...6 2.4...7 2.4.1...7 2.4.2...9 2.5...15 2.5.1...16 2.5.2...17 2.5.3...18 3.1...19 3.1.1...19 3.1.2 4~20mA...20

More information

ICS 13.310 A 91 SZDB/Z 深 圳 市 标 准 化 指 导 性 技 术 文 件 SZDB/Z 158 2015 交 通 运 输 行 业 视 频 监 控 联 网 系 统 通 用 技 术 要 求 General technical specification for video monitoring network system of transportation industry in

More information

#FT66/68CN(01~07)

#FT66/68CN(01~07) : KX-FT66CN KX-FT68CN KX-FT66 Panasonic Panasonic ( ) KX-FT66 KX-FT68 : CN KX-FT66 : ( KME ) KME Kyushu Matsushita Electric Co., Ltd. 2000 2000 2 E. F. 1. 14. ( 2. ) 3. 15. 4. 5. / 6. 1. 2. 7. 3. 4. 8.

More information

展讯平台软件架构介绍 [只读]

展讯平台软件架构介绍 [只读] (SAP) Software Application Platform Call SMS CBS SS PB Game. E-Mail Java App MMS/WEB ATC Multimedia Applications Audio/Video/Test PTT H.324/M MMI J2ME WAP SIP RTP/RTCP SOFTWARE APPLICATION PLATFORM MMI

More information

ADOBE PHOTOSHOP ALBUM STARTER EDITION Nokia Photoshop Album Starter Edition 3.0 Adobe Photo Downloader Nokia Suite Photoshop Album Starter

ADOBE PHOTOSHOP ALBUM STARTER EDITION Nokia Photoshop Album Starter Edition 3.0 Adobe Photo Downloader Nokia Suite Photoshop Album Starter 1 Adobe Photoshop Album Starter Edition 3.0 Adobe Photoshop Album Starter Edition 3.0 Photoshop Album Starter Edition 3.0 USB Photoshop Album Starter Edition 3.0 Photoshop Album Starter Edition 3.0 3 Photoshop

More information

錄...1 說...2 說 說...5 六 率 POST PAY PREPAY DEPOSIT 更

錄...1 說...2 說 說...5 六 率 POST PAY PREPAY DEPOSIT 更 AX5000 Version 1.0 2006 年 9 錄...1 說...2 說...3...4 說...5 六...6 6.1 率...7 6.2 POST PAY...8 6.3 PREPAY DEPOSIT...9 6.4...10 6.5...11 更...12...12 LCD IC LED Flash 更 兩 RJ11 ( ) DC ON OFF ON 狀 狀 更 OFF 復 狀 說

More information

, 7, Windows,,,, : ,,,, ;,, ( CIP) /,,. : ;, ( 21 ) ISBN : -. TP CIP ( 2005) 1

, 7, Windows,,,, : ,,,, ;,, ( CIP) /,,. : ;, ( 21 ) ISBN : -. TP CIP ( 2005) 1 21 , 7, Windows,,,, : 010-62782989 13501256678 13801310933,,,, ;,, ( CIP) /,,. : ;, 2005. 11 ( 21 ) ISBN 7-81082 - 634-4... - : -. TP316-44 CIP ( 2005) 123583 : : : : 100084 : 010-62776969 : 100044 : 010-51686414

More information

新・明解C言語入門編『索引』

新・明解C言語入門編『索引』 !... 75!=... 48 "... 234 " "... 9, 84, 240 #define... 118, 213 #include... 148 %... 23 %... 23, 24 %%... 23 %d... 4 %f... 29 %ld... 177 %lf... 31 %lu... 177 %o... 196 %p... 262 %s... 242, 244 %u... 177

More information

Microsoft Word - sb726097_ko.doc

Microsoft Word - sb726097_ko.doc : HP 1 HP Hewlett- Packard. HP., HP. HP., HP.,.,.. /, HP /. HP / /., HP HP /., /.., HP. HP.. Hewlett-Packard Company, HP,, / HP Compaq ( "HP " ). "HP ". "HP, HP. HP HP HP ( :,, ) HP " ".,. HP HP HP. HP,

More information

IC-900W Wireless Pan & Tilt Wireless Pan & Tilt Remote Control / Night Vision FCC ID:RUJ-LR802UWG

IC-900W Wireless Pan & Tilt Wireless Pan & Tilt Remote Control / Night Vision FCC ID:RUJ-LR802UWG IC-900W Wireless Pan & Tilt Wireless Pan & Tilt Remote Control / Night Vision FCC ID:RUJ-LR802UWG --------------------------------------------TABLE OF CONTENTS------------------------------------------

More information

Microsoft Word - lif27801電子中心

Microsoft Word - lif27801電子中心 生 活 中 常 用 的 開 放 軟 體 壹 前 言 隨 著 資 訊 科 技 日 漸 進 步, 資 訊 在 個 人 生 活 中 也 愈 來 愈 受 到 重 視 個 人 經 常 利 用 資 訊 科 技 查 詢 資 訊 完 成 日 常 的 工 作 或 甚 至 進 行 休 閒 育 樂 活 動 這 些 資 訊 活 動 都 必 須 使 用 軟 體 來 完 成, 但 軟 體 本 身 是 助 力, 同 時 也 是

More information

8idml_20_1_q

8idml_20_1_q Chapter 2 GIGA-BYTE TECHNOLOGY CO, LTD GBT ( ) GBT GBT, GBT 2002 3 15 1 1 11 3 12 AP64D(-H) 3 2 21 4 22 5 23 6 3 31 Win 98/98SE, WinME Win XP 8 311 8 312 Direct X 9 313 11 314 14 315 14 316 18 32 Windows

More information

How to Debug Tuxedo Server printf( Input data is: %s, inputstr); fprintf(stdout, Input data is %s, inputstr); fprintf(stderr, Input data is %s, inputstr); printf( Return data is: %s, outputstr); tpreturn(tpsuccess,

More information