public static void SetVolume(int vol) { if (!inited) { return; } volume = (float)vol / 100; if (channel != null) { channel.setVolume(volume); } }
private MusicPlayer() { result = FMOD.Factory.System_Create(out FMODSystem); if (result != FMOD.RESULT.OK) { throw new Exception("This crap didn't work!!"); } result = FMODSystem.setDSPBufferSize(1024, 10); result = FMODSystem.init(32, FMOD.INITFLAGS.NORMAL, (IntPtr)0); var info = new FMOD.CREATESOUNDEXINFO(); var song = new FMOD.Sound(); ChannelGroup = new FMOD.ChannelGroup(); ChannelGroup.clearHandle(); result = FMODSystem.createStream("rain.ogg", FMOD.MODE.DEFAULT, out song); result = FMODSystem.playSound(song, ChannelGroup, false, out Channel); bool isPlaying = false; Channel.isPlaying(out isPlaying); Channel.setVolume(1); Channel.setMode(FMOD.MODE.LOOP_NORMAL); Channel.setLoopCount(-1); int t = 1; }
public void UpdateVolume(float volume) { if (MusicChannel != null) { MusicChannel.setVolume(volume); } }
/// <summary> /// volume은 0 ~ 1 /// </summary> public static void Play(int index, float volume) { FMOD.Channel channel = null; sys.playSound(FMOD.CHANNELINDEX.FREE, sounds[index], true, ref channel); channel.setVolume(volume); channel.setPaused(false); }
/** * adapt a running sample according to renderparams and canvas result */ internal void AdaptChannelSettings(FMOD.Channel channel, RenderParams rp, RenderCanvas canvas) { double a = rp.Ampl * canvas.AmplMultiply + canvas.AmplAdd; double p = rp.Pan + canvas.Pan; channel.setVolume((float)a); channel.setPan((float)p); }
public void PlayInnerSound(SoundType type) { FMOD.RESULT result; FMOD.Sound sound = GetSound(type); if (sound != null) { result = soundsystem.playSound(FMOD.CHANNELINDEX.FREE, sound, false, ref channel); ERRCHECK(result); if (type == SoundType.ST_level1 || type == SoundType.ST_level2) { channel.setVolume(1f); } else { channel.setVolume(0.15f); } } }
public About() { img = Properties.Resources.nfo; img.MakeTransparent(Color.Black); InitializeComponent(); exInfo.cbsize = Marshal.SizeOf(exInfo); exInfo.length = (uint)Properties.Resources.teh.Length; SetStyle(ControlStyles.AllPaintingInWmPaint, true); SetStyle(ControlStyles.Opaque, true); SetStyle(ControlStyles.OptimizedDoubleBuffer, true); int step = 5; Color color = Color.FromArgb(255, 0, 0); customSpectrum.AddRange(Ext.Interpolate(ColorEnum.Green, ChangeEnum.Higher, color, step)); color = Color.FromArgb(255, 255, 0); customSpectrum.AddRange(Ext.Interpolate(ColorEnum.Red, ChangeEnum.Lower, color, step)); color = Color.FromArgb(0, 255, 0); customSpectrum.AddRange(Ext.Interpolate(ColorEnum.Blue, ChangeEnum.Higher, color, step)); color = Color.FromArgb(0, 255, 255); customSpectrum.AddRange(Ext.Interpolate(ColorEnum.Green, ChangeEnum.Lower, color, step)); color = Color.FromArgb(0, 0, 255); customSpectrum.AddRange(Ext.Interpolate(ColorEnum.Red, ChangeEnum.Higher, color, step)); color = Color.FromArgb(255, 0, 255); customSpectrum.AddRange(Ext.Interpolate(ColorEnum.Blue, ChangeEnum.Lower, color, step)); DoubleBuffered = true; this.Width = img.Width; y = -this.Height; FMOD.Factory.System_Create(ref soundSystem); soundSystem.init(32, FMOD.INITFLAG.NORMAL | FMOD.INITFLAG.WASAPI_EXCLUSIVE, IntPtr.Zero); soundSystem.createSound(Properties.Resources.teh, FMOD.MODE.SOFTWARE | FMOD.MODE._2D | FMOD.MODE.OPENMEMORY | FMOD.MODE.ACCURATETIME | FMOD.MODE.LOOP_NORMAL, ref exInfo, ref sound); soundSystem.playSound(FMOD.CHANNELINDEX.REUSE, sound, false, ref soundChannel); soundChannel.setVolume(.75f); tmr.Interval = 25; tmr.Tick += new EventHandler(tmr_Tick); tmr.Start(); }
public void setVolume(float vol) { if (_channel != null) { FMOD.RESULT result; result = _channel.setVolume(vol / 100.0f); if (result != FMOD.RESULT.OK) { Console.WriteLine("[SpeakerComponent setVolume] FMOD setVolume failed : " + result); } } }
public static void StartMusic(int n) { if (SoundChannel != null) { SoundChannel.stop(); } SoundSystem.playSound(FMOD.CHANNELINDEX.FREE, tunes[n], false, ref SoundChannel); SoundChannel.setVolume(0.5f); tuneIndex = n; }
public override void UpdateVolume() { //设置音量后,只有已载入文件的channel才去实际设置音量,否则仅设置音量数值 if (this.文件已载入 && m_FMODChannel != null) { float fVolumeAll = m_fVolumeMult * m_HostPlayer.音量倍率; if (m_HostPlayer.静音) { fVolumeAll = 0; } m_FMODChannel.setVolume(fVolumeAll); } }
private void comboBoxRecord_SelectedIndexChanged(object sender, System.EventArgs e) { FMOD.CREATESOUNDEXINFO exinfo = new FMOD.CREATESOUNDEXINFO(); FMOD.RESULT result; FMOD.DSP_RESAMPLER resampler = FMOD.DSP_RESAMPLER.MAX; int selected = comboBoxRecord.SelectedIndex; int temp = 0; FMOD.SOUND_FORMAT format = FMOD.SOUND_FORMAT.NONE; result = system.setSoftwareFormat(OUTPUTRATE, FMOD.SOUND_FORMAT.PCM16, 1, 0, 0); ERRCHECK(result); result = system.init(32, FMOD.INITFLAGS.NORMAL, (IntPtr)null); ERRCHECK(result); result = system.getSoftwareFormat(ref outputfreq, ref format, ref temp, ref temp, ref resampler, ref temp); ERRCHECK(result); /* * Create a sound to record to. */ exinfo.cbsize = Marshal.SizeOf(exinfo); exinfo.numchannels = 1; exinfo.format = FMOD.SOUND_FORMAT.PCM16; exinfo.defaultfrequency = OUTPUTRATE; exinfo.length = (uint)(exinfo.defaultfrequency * 2 * exinfo.numchannels * 5); result = system.createSound((string)null, (FMOD.MODE._2D | FMOD.MODE.SOFTWARE | FMOD.MODE.LOOP_NORMAL | FMOD.MODE.OPENUSER), ref exinfo, ref sound); ERRCHECK(result); comboBoxOutput.Enabled = false; comboBoxPlayback.Enabled = false; comboBoxRecord.Enabled = false; /* * Start recording */ result = system.recordStart(selected, sound, true); ERRCHECK(result); Thread.Sleep(200); /* Give it some time to record something */ result = system.playSound(FMOD.CHANNELINDEX.REUSE, sound, false, ref channel); ERRCHECK(result); /* Dont hear what is being recorded otherwise it will feedback. Spectrum analysis is done before volume scaling in the DSP chain */ result = channel.setVolume(0); ERRCHECK(result); }
private bool PlaySound(FMOD.Sound sound) { try { FMOD.Channel channel = null; FMOD.RESULT result = system.playSound(FMOD.CHANNELINDEX.FREE, sound, true, ref channel); if (result == FMOD.RESULT.OK && channel != null) { channel.setVolume(volume); channel.setPaused(false); } return(FMOD.ERROR.ERRCHECK(result)); } catch { return(false); } }
private bool PlayMusicCallback(FMOD.Sound sound) { FMOD.RESULT result; lock (syncMusicCallback) { bool isPlaying = false; manualMusicEnd = false; if (channel != null) { channel.isPlaying(ref isPlaying); } else { isPlaying = false; } if (isPlaying && channel != null) { manualMusicEnd = true; InfoLog.WriteInfo(DateTime.Now.ToString() + " | Music is playing, Manual music end: " + manualMusicEnd, EPrefix.AudioEngine); channel.setMute(true); channel.stop(); channel = null; } else { InfoLog.WriteInfo(DateTime.Now.ToString() + " | Music is not playing, Manual music end: " + manualMusicEnd, EPrefix.AudioEngine); } result = system.playSound(FMOD.CHANNELINDEX.REUSE, sound, true, ref channel); if (result == FMOD.RESULT.OK && channel != null) { channel.setVolume(volume); channel.setCallback(FMOD.CHANNEL_CALLBACKTYPE.END, endPlayCallback, 0); InfoLog.WriteInfo(DateTime.Now.ToString() + " | Before Play music begin", EPrefix.AudioEngine); channel.setPaused(false); } } InfoLog.WriteInfo(DateTime.Now.ToString() + " | After Play music begin, result: " + result, EPrefix.AudioEngine); return(FMOD.ERROR.ERRCHECK(result)); }
public void PlaySound() { bool state = true; while (state) { FMOD.OPENSTATE openstate = 0; uint percentbuffered = 0; bool starving = false; bool busy = false; FMOD.RESULT result = sounds.getOpenState(ref openstate, ref percentbuffered, ref starving, ref busy); ErrorCheck(result); if (openstate == FMOD.OPENSTATE.READY && channels == null) { result = system.playSound(FMOD.CHANNELINDEX.FREE, sounds, false, ref channels); ErrorCheck(result); channels.setVolume(0.0f); state = false; } } }
private void sineWave_Click(object sender, System.EventArgs e) { FMOD.RESULT result; float pan = 0, frequency = 0; if (channel != null) { channel.stop(); } if (dsp != null) { dsp.release(); } /* * Create an oscillator DSP unit for the tone. */ result = system.createDSPByType(FMOD.DSP_TYPE.OSCILLATOR, ref dsp); ERRCHECK(result); result = dsp.setParameter((int)FMOD.DSP_OSCILLATOR.RATE, 440.0f); /* musical note 'A' */ ERRCHECK(result); result = system.playDSP(FMOD.CHANNELINDEX.REUSE, dsp, true, ref channel); ERRCHECK(result); channel.setVolume(0.5f); result = dsp.setParameter((int)FMOD.DSP_OSCILLATOR.TYPE, 0); ERRCHECK(result); channel.setPaused(false); channel.getFrequency(ref frequency); channel.getPan(ref pan); trackBarVolume.Value = 512; trackBarFrequency.Value = (int)frequency; trackBarPan.Value = (int)(pan * 512); }
/// <summary> /// 播放 /// </summary> public void play() { //mciSendString("close all", "", 0, 0); //mciSendString("open \"" + FilePath + "\" alias media", "", 0, 0); //mciSendString("play media", "", 0, 0); try { //if(fmodSystem != null) { // stop(); //} FMOD.RESULT fmodResult; if (fmodSystem == null) { // 1.创建System实例 fmodResult = FMOD.Factory.System_Create(out fmodSystem); if (fmodResult != FMOD.RESULT.OK) { Debug.WriteLine(FMOD.Error.String(fmodResult)); return; } // 2.初始化System fmodResult = fmodSystem.init(32, FMOD.INITFLAGS.NORMAL, IntPtr.Zero); if (fmodResult != FMOD.RESULT.OK) { Debug.WriteLine(FMOD.Error.String(fmodResult)); return; } } //FMOD.Sound soundEffect; // 音效 //FMOD.Sound backgroundMusic; // 背景音乐 // 3.创建声音资源 // 使用createSound创建音效 创建音效要用MODE.LOOP_OFF关闭循环播放(默认循环开启) out 一个Sound实例 // createSound用来创建比较短不占用空间的音效,例如游戏中的攻击音效,可以在多个通道同时播放 //fmodResult = fmodSystem.createSound("test.wav", FMOD.MODE.LOOP_OFF, out soundEffect); //if(fmodResult != FMOD.RESULT.OK) { // Debug.WriteLine(FMOD.Error.String(fmodResult)); // return; //} // 使用createStream创建背景音乐 提供文件名 创建BGM可以默认开启循环 out 一个Sound实例 // createStream用来创建比较长的声音,需要不停加载数据 例如游戏中的背景音乐,stream只能在一个通道播放 fmodResult = fmodSystem.createStream(path, FMOD.MODE.LOOP_NORMAL, out backgroundMusic); if (fmodResult != FMOD.RESULT.OK) { Debug.WriteLine(FMOD.Error.String(fmodResult)); return; } //FMOD.Channel channelEffect; // 音效的播放通道 // 播放音乐 提供Sound 通道组我们没有 开始时是否暂停 是 out 当前声音的播放通道 fmodSystem.playSound(backgroundMusic, null, false, out channelMusic); // 暂停来设置音量 0.0 - 1.0 channelMusic.setVolume(volume); // 恢复播放 //channelMusic.setPaused(false); // 按下ESC退出播放 //while(Console.ReadKey().Key != ConsoleKey.Escape) { // // 按下空格播放音效 // if(Console.ReadKey().Key == ConsoleKey.Spacebar) // fmodSystem.playSound(soundEffect, null, false, out channelEffect); //} // 最后释放所有资源 可以代替.close(); //fmodSystem.release(); } catch (Exception ex) { Debug.WriteLine("aa:" + ex.ToString()); } }
public static void Play(string key, int speaker, float volume = 1f, bool loop = false) { #if NO_AUDIO return; #endif // play audio FMOD.RESULT result = system.playSound(FMOD.CHANNELINDEX.FREE, sounds[key], true, ref channel); ERRCHECK(result); result = channel.setVolume(volume); ERRCHECK(result); int index = 0; channel.getIndex(ref index); channelIDs.Add(index); FMOD.MODE loopAudio = (loop) ? FMOD.MODE.LOOP_NORMAL : FMOD.MODE.LOOP_OFF; result = channel.setMode(loopAudio); //SPEAKER 1 (Satelite Audio, Side Specific) if (speaker == 0) { result = channel.setSpeakerMix(0, 0, 0, 0, 0, 0, 1.0f, 0); ERRCHECK(result); } //SPEAKER 2 (Satelite Audio, Side Specific) if (speaker == 1) { result = channel.setSpeakerMix(0, 0, 0, 0, 0, 0, 0, 1.0f); ERRCHECK(result); } //SPEAKER 3 (Satelite Audio, Side Specific) if (speaker == 2) { result = channel.setSpeakerMix(0, 0, 0, 0, 1.0f, 0, 0, 0); ERRCHECK(result); } //SPEAKER (Satelite Audio, Side Specific) if (speaker == 3) { result = channel.setSpeakerMix(0, 0, 0, 0, 0, 1.0f, 0, 0); ERRCHECK(result); } //SPEAKER 5 (Subwoofer) if (speaker == 4) { result = channel.setSpeakerMix(0, 0, 1.0f, 0, 0, 0, 0, 0); ERRCHECK(result); } if (isMuted) { channel.setMute(isMuted); } result = channel.setPaused(false); ERRCHECK(result); }
public static void Update(GameTime gameTime) { system.update(); if (IsSongPlaying()) { uint length = 0; uint position = 0; CurrentSong.getLength(out length, FMOD.TIMEUNIT.MS); Channel.getPosition(out position, FMOD.TIMEUNIT.MS); if (position == length) { NextSongEvent.Invoke(); } // BPM Method 1 (More research) #region Update System & FFT Algorithm if (FFTEnabled) { // Perform a Fast Fourier Transform int windowSize = spectrum.Length; //Samples. IntPtr data; uint fft_length; //hanning bpm MyDSP.setParameterInt((int)FMOD.DSP_FFT.WINDOWTYPE, (int)FMOD.DSP_FFT_WINDOW.HAMMING); MyDSP.setParameterInt((int)FMOD.DSP_FFT.WINDOWSIZE, windowSize); MyDSP.getParameterData((int)FMOD.DSP_FFT.SPECTRUMDATA, out data, out fft_length); MyDSP.getParameterFloat((int)FMOD.DSP_FFT.DOMINANT_FREQ, out higher_freq); fftParameter = (FMOD.DSP_PARAMETER_FFT)Marshal.PtrToStructure(data, typeof(FMOD.DSP_PARAMETER_FFT)); #region BPMDetection if (fftParameter.spectrum.Length != 0) { for (int i = 0; i < windowSize; i++) { if (fftParameter.spectrum.Length == 2) { spectrum[i] = (fftParameter.spectrum[0][i] + fftParameter.spectrum[1][i]) / 2f; } } } previousSpectrum = spectrum; #endregion } #endregion // BPM Method 2 (Working! but with small sync bugs) float bps = (60f / BPM); bpm_elapsed += (float)gameTime.ElapsedGameTime.TotalSeconds; if (bpm_elapsed > bps) { gotBeat = true; offBeatDelay += (float)gameTime.ElapsedGameTime.TotalSeconds; if (offBeatDelay > bps) { gotBeat = false; bpm_elapsed = 0f; offBeatDelay = 0f; } } } Channel.setVolume(masterVolume * musicVolume); }
public static bool Play(string strRootPath, SoundItemProperty prop) { FMOD.RESULT result; if (channel != null) { channel.stop(); } string name = strRootPath + prop.FileName; FMOD.MODE mode = FMOD.MODE.DEFAULT; if (prop.Type == SoundItemProperty.typeSound[0]) { mode |= FMOD.MODE._2D | FMOD.MODE.CREATESAMPLE | FMOD.MODE.SOFTWARE; } else if (prop.Type == SoundItemProperty.typeSound[1]) { mode |= FMOD.MODE._3D | FMOD.MODE.CREATESAMPLE | FMOD.MODE.SOFTWARE | FMOD.MODE._3D_LINEARROLLOFF | FMOD.MODE._3D_WORLDRELATIVE | FMOD.MODE._3D_IGNOREGEOMETRY; } else if (prop.Type == SoundItemProperty.typeSound[2]) { mode |= FMOD.MODE._2D | FMOD.MODE.CREATESTREAM | FMOD.MODE.SOFTWARE; } if (prop.Loop == true) { mode |= FMOD.MODE.LOOP_NORMAL; } result = system.createSound(name, mode, ref sound); ERRCHECK(result); result = system.playSound(FMOD.CHANNELINDEX.FREE, sound, true, ref channel); ERRCHECK(result); if (prop.Type == SoundItemProperty.typeSound[1]) { channel.set3DMinMaxDistance(100.0f, prop.MaxDistance); FMOD.VECTOR pos = new FMOD.VECTOR(); pos.x = 0.0f; pos.y = 0.0f; pos.z = 0.0f; FMOD.VECTOR vel = new FMOD.VECTOR(); vel.x = 0.0f; vel.y = 0.0f; vel.z = 0.0f; channel.set3DAttributes(ref pos, ref vel); FMOD.DSP dsp = null; result = system.createDSPByType(FMOD.DSP_TYPE.LOWPASS_SIMPLE, ref dsp); ERRCHECK(result); dsp.setParameter((int)FMOD.DSP_LOWPASS_SIMPLE.CUTOFF, 22000.0f); FMOD.DSPConnection dspcon = null; channel.addDSP(dsp, ref dspcon); } channel.setVolume((float)prop.Volume * 0.01f); channel.setCallback(CHANNELCALLBACK); channel.setPaused(false); return(true); }