mirror of
https://github.com/0ldsk00l/nestopia.git
synced 2025-04-02 10:31:51 -04:00
145 lines
3.9 KiB
C++
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
|
|
}
|
|
|