public BASSOutput(OutputDevice.StreamProc proc, uint freq, uint chans, string preferredDeviceName, int buflen) { var outdev = GetInitializedBassRealOutputDevice(); if (outdev == 0) { int deviceid = -1; var devices = BASS.GetDevices(); for (int i = 0; i < devices.Length; i++) { var device = devices[i]; if (device.Name == preferredDeviceName) { deviceid = i; Logger.Debug("Found preferred output device:" + device.ToString()); break; } } BASS.BASS_Init(deviceid, freq, 1500); outdev = GetInitializedBassRealOutputDevice(); } BASS.BASS_SetDevice(outdev); StreamProc = proc; Bassout = new BASS.UserSampleStream(freq, chans, (x, y) => StreamProc(x, y), (BASS.Stream.StreamFlag.BASS_STREAM_FLOAT) | BASS.Stream.StreamFlag.BASS_STREAM_AUTOFREE); Logger.Debug("Use Float Output"); }
public Music AddTestMusic(string path) { UInt32 stream = BASS.BASS_StreamCreateFile(path, 0, 0, BASSFlag.BASS_DEFAULT); Music music = new Music(); music.path = path; music.relativePath = (new Uri(System.Environment.CurrentDirectory)).MakeRelativeUri(new Uri(path)).ToString(); music.stream = stream; music.position = 0; music.bassTAG = BASS_TAG.BASS_ChannelGetTags(stream, BASSTagFlags.BASS_TAG_ID3V2); music.content = System.IO.Path.GetFileName(path); music.status = MusicStatus.Stopped; return(music); }
/// <summary> /// BASS_Initが実行されたサウンド出力デバイスを取得する(除くno soundデバイス) /// </summary> /// <returns>最初に見つかったInitedなサウンド出力デバイスのデバイス。見つからなかった場合は0</returns> private uint GetInitializedBassRealOutputDevice() { uint a; BASS.BASS_DEVICEINFO?info; for (a = 1; (info = BASS.GetDeviceInfo(a)).HasValue; a++) { var _info = info.Value; if (_info.IsInit) { return(a); } } return(0); }
public PlayButtonListViewModel() { BASS.BASS_Init(-1, 44100, BASSInitFlags.BASS_DEVICE_DEFAULTS, IntPtr.Zero); this.musics = new ObservableCollection <Music>(); _eventAggregator.GetEvent <MusicAddFileEvent>().Subscribe(e => AddFile(e)); MusicService musicservice = new MusicService(); var _music = musicservice.AddTestMusic(@"D:\CodeBase\音效软件\Win32\Debug\单车.mp3"); this.musics.Add(_music); _music = musicservice.AddTestMusic(@"D:\CodeBase\音效软件\Win32\Debug\苦瓜.mp3"); this.musics.Add(_music); }
/// <summary> /// コンストラクタ /// </summary> /// <exception cref="System.ArgumentException"></exception> /// <param name="filename"></param> /// <param name="isFloat"></param> /// <param name="preScan"></param> public BASSDecodeStreamAdapter(string filename, bool isFloat = true, bool preScan = false) { if (!Initialized) { BASS.BASS_SetDevice(0); Initialized = true; } try { this.Stream = new BASS.FileStream(filename, MakeFlag(isFloat, preScan), getData_retryMax: GET_DATA_RETRY_MAX_DEFAULT); } catch (BASS.BASSException ex) { throw new ArgumentException("Cannot create stream", ex); } }
/// <summary> /// アプリケーション全体の初期化 /// </summary> /// <returns>メインウィンドウ</returns> internal static System.Windows.Forms.Form Init() { System.Windows.Forms.Form componentAsMainForm = null; SetDllDirectoryW(""); // migemoのロード try { MyMigemo = new Migemo(@"dict\migemo-dict"); } catch (Exception e) { Logger.Error(e); } // ライブラリ準備 Library = MyUserDirectory.OpenLibrary(); // プレイリスト管理の開始 MyPlaylistManager = new PlaylistManager(); // コンポーネントの読み込み MyComponentManager.Add(MyCoreComponent); componentAsMainForm = MyComponentManager.BuildAllInstance(System.IO.Directory.GetFiles(MyUserDirectory.ComponentDir, "*.dll")); MyComponentManager.LoadSettings(); MyPlaylistManager.CreatePlaylist(MyCoreComponent.LatestPlaylistQuery); if (BASS.IsAvailable) { BASS.BASS_Init(0, buffer_len: 500); if (System.IO.Directory.Exists(MyUserDirectory.PluginDir)) { foreach (String dllFilename in System.IO.Directory.GetFiles(MyUserDirectory.PluginDir, "*.dll")) { bool success = BASSPlugin.Load(dllFilename, 0); Logger.Log("Loading " + dllFilename + (success ? " OK" : " Failed")); } } } Controller.Startup(); return(componentAsMainForm); }
private static void Main(string[] args) { if (BASS.BASS_Init(-1, 44100, BASSInitFlags.BASS_DEVICE_DEFAULTS, IntPtr.Zero)) { UInt32 stream = BASS.BASS_StreamCreateFile(@"D:\alarm.mp3", 0, 0, BASSFlag.BASS_DEFAULT); if (stream != 0) { Console.WriteLine("Set playback position (in seconds):"); double pos = double.Parse(Console.ReadLine()); Console.WriteLine("Set master volume levevl (0..1):"); float vlevel = float.Parse(Console.ReadLine()); BASS.BASS_SetVolume(vlevel); BASS.BASS_ChannelSetPosition(stream, BASS.BASS_ChannelSeconds2Bytes(stream, pos), BASSPosMode.BASS_POS_BYTE); BASS.BASS_ChannelPlay(stream, false); BASS_TAG tags = BASS_TAG.BASS_ChannelGetTags(stream, BASSTagFlags.BASS_TAG_ID3V2); Console.WriteLine( "Artist: {0}\nTitle: {1}\nAlbum: {2}\nTrackNo: {3}\nGenre: {4}\nYear: {5}\nComment: {6}", tags.Artist, tags.Title, tags.Album, tags.TrackNo, tags.Genre, tags.Year, tags.Comment); while (true) { TimeSpan t = TimeSpan.FromSeconds(BASS.BASS_ChannelBytes2Seconds(stream, BASS.BASS_ChannelGetPosition(stream, BASSPosMode .BASS_POS_BYTE))); Console.Write( string.Format("\rPlayback postion: {0:D2}h:{1:D2}m:{2:D2}s:{3:D3}ms; CPU usage: {4}", t.Hours, t.Minutes, t.Seconds, t.Milliseconds, BASS.BASS_GetCPU())); } Console.WriteLine("Press any key to exit..."); Console.ReadKey(false); BASS.BASS_StreamFree(stream); } else { Console.WriteLine(BASS.BASS_ErrorGetCode()); } BASS.BASS_Free(); } }
public static IOutputDevice CreateOutputDevice(OutputDevice.StreamProc streamProc, uint freq, uint chans, bool useFloat, int bufferLen, string preferredDeviceName = null) { lock (outputChannelLock) { Logger.Debug("Rebuild output"); if (Lutea.Core.AppCore.EnableWASAPIExclusive) { try { var ret = new BASSWASAPIOutputChannel(streamProc, true, freq, chans, preferredDeviceName, (uint)bufferLen); BASS.SetPriority(System.Diagnostics.ThreadPriorityLevel.TimeCritical); BASSWASAPIOutput.SetPriority(System.Diagnostics.ThreadPriorityLevel.TimeCritical); return(ret); } catch (BASSWASAPIOutput.BASSWASAPIException) { } } try { var ret = new BASSWASAPIOutputChannel(streamProc, false, freq, chans, preferredDeviceName, (uint)bufferLen); BASS.SetPriority(System.Diagnostics.ThreadPriorityLevel.TimeCritical); BASSWASAPIOutput.SetPriority(System.Diagnostics.ThreadPriorityLevel.TimeCritical); return(ret); } catch (BASSWASAPIOutput.BASSWASAPIException) { } try { var ret = new BASSOutput(streamProc, freq, chans, preferredDeviceName, bufferLen); BASS.SetPriority(System.Diagnostics.ThreadPriorityLevel.TimeCritical); return(ret); } catch (BASS.BASSException) { } throw new NotSupportedException(); } }
public BASSWASAPIOutputChannel(OutputDevice.StreamProc proc, bool exclusive, uint freq, uint chans, string preferredDeviceName, uint bufLen) { this.Exclusive = exclusive; BASS.BASS_SetDevice(0); int deviceid = -1; var devices = BASSWASAPIOutput.GetDevices(); for (int i = 0; i < devices.Length; i++) { var device = devices[i]; if ((device.Name == preferredDeviceName) && ((device.Flag & BASSWASAPIOutput.BASS_WASAPI_DEVICEINFO.Flags.BASS_DEVICE_INPUT) == 0) && (device.Mixchans >= chans)) { deviceid = i; Logger.Debug("Found preferred output device:" + device.ToString()); break; } } StreamProc = proc; BassWasapiOutput = new BASSWASAPIOutput(freq, chans, (x, y) => StreamProc(x, y), BASSWASAPIOutput.InitFlags.Buffer | (exclusive ? BASSWASAPIOutput.InitFlags.Exclusive : 0), deviceid, bufLen); Logger.Log("Use WASAPI Exclusive Output: freq=" + BassWasapiOutput.Info.Freq + ", format=" + BassWasapiOutput.Info.Format); }
/// <summary> /// 出力デバイスとして選択可能なデバイスの名前のリストを取得する /// </summary> /// <returns></returns> private static string[] GetDeviceNameListForSetting() { return(BASS.GetDevices().Select(((_, i) => i == 0 ? PseudoDeviceNameForDefaultOutput : _.Name)).ToArray()); }