bool ckLowLevelAPI::openSoundDevice(u8 channel_num, u16 sample_rate, u16 snd_mix_buf_msec, SoundMixFunction snd_mix_func) { if (isSoundDeviceOpen()) { closeSoundDevice(); } s_channel_num = channel_num; s_sample_rate = sample_rate; s_snd_mix_buf_msec = snd_mix_buf_msec; s_snd_mix_buf_size = channel_num * sample_rate * 2 * snd_mix_buf_msec / 1000; s_snd_mix_buf_sample_num = sample_rate * snd_mix_buf_msec / 1000; // TODO // s_is_snd_dev_open = true; return false; // TODO }
bool fsLowLevelAPI::openSoundDevice(u8 channel_num, u16 sample_rate, u16 snd_mix_buf_msec, SoundMixFunction snd_mix_func) { fprintf(stderr,"channel_num %d sample_rate %d snd_mix_buf_mse %d \n",channel_num, sample_rate, snd_mix_buf_msec); if (isSoundDeviceOpen()) { closeSoundDevice(); } pthread_mutex_init(&s_snd_mix_mutex, NULL); s_snd_mix_func = snd_mix_func; m_pAudioDevice = alcOpenDevice(NULL); if (m_pAudioDevice) { m_pAlcContext = alcCreateContext(m_pAudioDevice, NULL); alcMakeContextCurrent(m_pAlcContext); } ALenum err = alGetError(); if (err != AL_NO_ERROR) { return false; } alGenSources(1, &m_AudioSource); alGenBuffers(BUFFER_COUNT, m_AudioBuffers); s_channel_num = channel_num; s_sample_rate = sample_rate; s_snd_mix_buf_msec = snd_mix_buf_msec; s_snd_mix_buf_sample_num = sample_rate * snd_mix_buf_msec / 1000; s_bits_per_sample = 16; if (s_channel_num != 1 && s_channel_num != 2) { return false; } switch (s_bits_per_sample){ case 8: m_AudioFormat = (channel_num == 1) ? AL_FORMAT_MONO8 : AL_FORMAT_STEREO8; break; case 16: m_AudioFormat = (channel_num == 1) ? AL_FORMAT_MONO16 : AL_FORMAT_STEREO16; break; default: return 0; } // m_AudioFormat = AL_FORMAT_STEREO16; s_snd_mix_buf_size = 2 * s_channel_num * s_snd_mix_buf_sample_num; /*for (s32 i = 0; i < 2; i++) { s_snd_mix_buf[i] = ckMalloc(s_snd_mix_buf_size); ckMemMgr::memset(s_snd_mix_buf[i], 0, s_snd_mix_buf_size); }*/ buf = fsMalloc(s_snd_mix_buf_size); s_snd_mix_buf = fsMalloc(s_snd_mix_buf_size*2); //alGenBuffers(BUFFER_COUNT, m_AudioBuffers); //alGenSources(1, &m_AudioSource); //alSourcePlay(m_AudioSource); s_is_playing = true; if (pthread_create(&s_snd_play_thread, NULL, soundPlayThread, NULL) != 0) { s_is_playing = false; closeSoundDevice(); return false; } // if (pthread_create(&s_snd_play_thread, NULL, soundPlayThread, NULL) != 0) // { // s_is_playing = false; // closeSoundDevice(); // return false; // } // s_is_snd_dev_open = true; return true; }