nestopia/source/core/api/NstApiSound.cpp

145 lines
3.9 KiB
C++

////////////////////////////////////////////////////////////////////////////////////////
//
// Nestopia - NES/Famicom emulator written in C++
//
// Copyright (C) 2003-2008 Martin Freij
//
// This file is part of Nestopia.
//
// Nestopia is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// Nestopia is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Nestopia; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
////////////////////////////////////////////////////////////////////////////////////////
#include "../NstMachine.hpp"
#include "NstApiSound.hpp"
namespace Nes
{
#ifdef NST_MSVC_OPTIMIZE
#pragma optimize("s", on)
#endif
namespace Core
{
namespace Sound
{
Output::Locker Output::lockCallback;
Output::Unlocker Output::unlockCallback;
}
}
namespace Api
{
NST_COMPILE_ASSERT
(
Sound::CHANNEL_SQUARE1 == 1U << Core::Apu::Channel::APU_SQUARE1 &&
Sound::CHANNEL_SQUARE2 == 1U << Core::Apu::Channel::APU_SQUARE2 &&
Sound::CHANNEL_TRIANGLE == 1U << Core::Apu::Channel::APU_TRIANGLE &&
Sound::CHANNEL_NOISE == 1U << Core::Apu::Channel::APU_NOISE &&
Sound::CHANNEL_DPCM == 1U << Core::Apu::Channel::APU_DPCM &&
Sound::CHANNEL_FDS == 1U << Core::Apu::Channel::EXT_FDS &&
Sound::CHANNEL_MMC5 == 1U << Core::Apu::Channel::EXT_MMC5 &&
Sound::CHANNEL_VRC6 == 1U << Core::Apu::Channel::EXT_VRC6 &&
Sound::CHANNEL_VRC7 == 1U << Core::Apu::Channel::EXT_VRC7 &&
Sound::CHANNEL_N163 == 1U << Core::Apu::Channel::EXT_N163 &&
Sound::CHANNEL_S5B == 1U << Core::Apu::Channel::EXT_S5B
);
Result Sound::SetSampleRate(ulong rate) throw()
{
return emulator.cpu.GetApu().SetSampleRate( rate );
}
Result Sound::SetVolume(uint channels,uint volume) throw()
{
return emulator.cpu.GetApu().SetVolume( channels, volume );
}
Result Sound::SetSpeed(uint speed) throw()
{
return emulator.cpu.GetApu().SetSpeed( speed );
}
void Sound::SetAutoTranspose(bool enable) throw()
{
emulator.cpu.GetApu().SetAutoTranspose( enable );
}
void Sound::SetGenie(bool enable) throw()
{
emulator.cpu.GetApu().SetGenie( enable );
}
void Sound::SetSpeaker(Speaker speaker) throw()
{
emulator.cpu.GetApu().EnableStereo( speaker == SPEAKER_STEREO );
}
ulong Sound::GetSampleRate() const throw()
{
return emulator.cpu.GetApu().GetSampleRate();
}
uint Sound::GetVolume(uint channel) const throw()
{
return emulator.cpu.GetApu().GetVolume( channel );
}
uint Sound::GetSpeed() const throw()
{
return emulator.cpu.GetApu().GetSpeed();
}
void Sound::Mute(bool mute) throw()
{
emulator.cpu.GetApu().Mute( mute );
}
bool Sound::IsMuted() const throw()
{
return emulator.cpu.GetApu().IsMuted();
}
bool Sound::IsAudible() const throw()
{
return emulator.cpu.GetApu().IsAudible();
}
bool Sound::IsAutoTransposing() const throw()
{
return emulator.cpu.GetApu().IsAutoTransposing();
}
bool Sound::IsGenie() const throw()
{
return emulator.cpu.GetApu().IsGenie();
}
Sound::Speaker Sound::GetSpeaker() const throw()
{
return emulator.cpu.GetApu().InStereo() ? SPEAKER_STEREO : SPEAKER_MONO;
}
void Sound::EmptyBuffer() throw()
{
emulator.cpu.GetApu().ClearBuffers();
}
}
#ifdef NST_MSVC_OPTIMIZE
#pragma optimize("", on)
#endif
}