/// <summary> /// Creates a new instance of <see cref="FFMpegWriter"/>. /// </summary> /// <param name="FileName">Path for the output file.</param> /// <param name="FrameRate">Video Frame Rate.</param> public FFMpegWriter(string FileName, IImageProvider ImageProvider, int FrameRate, int VideoQuality, FFMpegVideoArgsProvider VideoArgsProvider, int AudioQuality, FFMpegAudioArgsProvider AudioArgsProvider, IAudioProvider AudioProvider, int Frequency = 44100, int Channels = 2) { _videoBuffer = new byte[ImageProvider.Width * ImageProvider.Height * 4]; var audioPipeName = GetPipeName(); var videoPipeName = GetPipeName(); var videoInArgs = $"-framerate {FrameRate} -f rawvideo -pix_fmt rgb32 -video_size {ImageProvider.Width}x{ImageProvider.Height} -i {pipePrefix}{videoPipeName}"; var videoOutArgs = $"{VideoArgsProvider(VideoQuality)} -r {FrameRate}"; string audioInArgs = "", audioOutArgs = ""; if (AudioProvider != null) { audioInArgs = $"-f s16le -acodec pcm_s16le -ar {Frequency} -ac {Channels} -i {pipePrefix}{audioPipeName}"; audioOutArgs = AudioArgsProvider(AudioQuality); _audioPipe = new NamedPipeServerStream(audioPipeName, PipeDirection.Out, 1, PipeTransmissionMode.Byte, PipeOptions.Asynchronous, 10000, 10000); } _ffmpegIn = new NamedPipeServerStream(videoPipeName, PipeDirection.Out, 1, PipeTransmissionMode.Byte, PipeOptions.Asynchronous, 10000, 10000); _ffmpegProcess = FFMpegService.StartFFMpeg($"{videoInArgs} {audioInArgs} {videoOutArgs} {audioOutArgs} \"{FileName}\""); }
/// <summary> /// Creates a new instance of <see cref="IRecorder"/> writing to <see cref="IAudioFileWriter"/>. /// </summary> /// <param name="audioWriter">The <see cref="IAudioFileWriter"/> to write to.</param> /// <param name="audioProvider">The audio source.</param> public Recorder(IAudioFileWriter audioWriter, IAudioProvider audioProvider) { _audioWriter = audioWriter ?? throw new ArgumentNullException(nameof(audioWriter)); _audioProvider = audioProvider ?? throw new ArgumentNullException(nameof(audioProvider)); _audioProvider.DataAvailable += AudioProvider_DataAvailable; }
/// <summary> /// Creates a new instance of <see cref="IRecorder"/> writing to <see cref="IAudioFileWriter"/>. /// </summary> /// <param name="AudioWriter">The <see cref="IAudioFileWriter"/> to write to.</param> /// <param name="AudioProvider">The audio source.</param> public Recorder(IAudioFileWriter AudioWriter, IAudioProvider AudioProvider) { _audioWriter = AudioWriter ?? throw new ArgumentNullException(nameof(AudioWriter)); _audioProvider = AudioProvider ?? throw new ArgumentNullException(nameof(AudioProvider)); _audioProvider.DataAvailable += (s, e) => _audioWriter.Write(e.Buffer, 0, e.Length); }
/// <summary> /// Creates a new instance of <see cref="IRecorder"/> writing to <see cref="IVideoFileWriter"/>. /// </summary> /// <param name="VideoWriter">The <see cref="IVideoFileWriter"/> to write to.</param> /// <param name="ImageProvider">The image source.</param> /// <param name="FrameRate">Video Frame Rate.</param> /// <param name="AudioProvider">The audio source. null = no audio.</param> public Recorder(IVideoFileWriter VideoWriter, IImageProvider ImageProvider, int FrameRate, IAudioProvider AudioProvider = null) { _videoWriter = VideoWriter ?? throw new ArgumentNullException(nameof(VideoWriter)); _imageProvider = ImageProvider ?? throw new ArgumentNullException(nameof(ImageProvider)); _audioProvider = AudioProvider; if (FrameRate <= 0) { throw new ArgumentException("Frame Rate must be possitive", nameof(FrameRate)); } _frameRate = FrameRate; _congestionFrameCount = _frameRate * 2; // 2 seconds _maxFrameCount = _frameRate * 4; // 4 seconds _continueCapturing = new ManualResetEvent(false); if (VideoWriter.SupportsAudio && AudioProvider != null) { AudioProvider.DataAvailable += AudioProvider_DataAvailable; } else { _audioProvider = null; } _sw = new Stopwatch(); _frames = new BlockingCollection <IBitmapFrame>(); _recordTask = Task.Factory.StartNew(async() => await DoRecord(), TaskCreationOptions.LongRunning); _writeTask = Task.Factory.StartNew(DoWrite, TaskCreationOptions.LongRunning); }
/// <summary> /// Initializes a new AudioManager class. /// </summary> /// <param name="audioInitializer">The AudioInitializer.</param> internal AudioManager(IAudioInitializer audioInitializer) { _audioEffectGroups = new List <AudioEffectGroup>(); var logger = LogManager.GetClassLogger(); if (audioInitializer == null) { logger.Warn("The specified audio initializer was null."); } else if (!audioInitializer.IsSupported) { logger.Warn("The specified AudioProvider is not supported."); } else { AudioInitializer = audioInitializer; _audioProvider = audioInitializer.Create(); _audioProvider.PlaybackChanged += PlaybackChanged; #if DEBUG var metadata = MetaDataReader.ReadMetaData(_audioProvider); if (metadata.ContainsKey("Name")) { logger.Info("Audiosystem initialized with {0}.", metadata["Name"]); } else { logger.Info("Audiosystem initialized with unknown."); } #endif } }
/// <summary> /// Initializes a new AudioManager class. /// </summary> /// <param name="audioInitializer">The AudioInitializer.</param> internal AudioManager(IAudioInitializer audioInitializer) { _audioEffectGroups = new List<AudioEffectGroup>(); var logger = LogManager.GetClassLogger(); if (audioInitializer == null) { logger.Warn("The specified audio initializer was null."); } else if (!audioInitializer.IsSupported) { logger.Warn("The specified AudioProvider is not supported."); } else { AudioInitializer = audioInitializer; _audioProvider = audioInitializer.Create(); _audioProvider.PlaybackChanged += PlaybackChanged; #if DEBUG var metadata = MetaDataReader.ReadMetaData(_audioProvider); if (metadata.ContainsKey("Name")) { logger.Info("Audiosystem initialized with {0}.", metadata["Name"]); } else { logger.Info("Audiosystem initialized with unknown."); } #endif } }
/// <summary> /// Creates a new instance of <see cref="IRecorder"/> writing to <see cref="IVideoFileWriter"/>. /// </summary> /// <param name="VideoWriter">The <see cref="IVideoFileWriter"/> to write to.</param> /// <param name="ImageProvider">The image source.</param> /// <param name="FrameRate">Video Frame Rate.</param> /// <param name="AudioProvider">The audio source. null = no audio.</param> public Recorder(IVideoFileWriter VideoWriter, IImageProvider ImageProvider, int FrameRate, IAudioProvider AudioProvider = null) { _videoWriter = VideoWriter ?? throw new ArgumentNullException(nameof(VideoWriter)); _imageProvider = ImageProvider ?? throw new ArgumentNullException(nameof(ImageProvider)); _audioProvider = AudioProvider; _frameRate = FrameRate; _continueCapturing = new ManualResetEvent(false); if (VideoWriter.SupportsAudio && AudioProvider != null) { AudioProvider.DataAvailable += AudioProvider_DataAvailable; } else { _audioProvider = null; } _sw = new Stopwatch(); _frames = new BlockingCollection <Bitmap>(); _recordTask = Task.Factory.StartNew(DoRecord, TaskCreationOptions.LongRunning); _writeTask = Task.Factory.StartNew(DoWrite, TaskCreationOptions.LongRunning); }
public void Removed(IAudioProvider provider) { lock (_locker) { _providers.Remove(provider); } }
/// <summary> /// Initialises the <see cref="IVideoFileWriter"/>. Usually called by an <see cref="IRecorder"/>. /// </summary> /// <param name="ImageProvider">The Image Provider.</param> /// <param name="FrameRate">Video Frame Rate.</param> /// <param name="AudioProvider">The Audio Provider (not supported with GIF).</param> public void Init(IImageProvider ImageProvider, int FrameRate, IAudioProvider AudioProvider) { DefaultFrameDelay = 1000 / FrameRate; DefaultWidth = ImageProvider.Width; DefaultHeight = ImageProvider.Height; }
/// <summary> /// Creates a new instance of <see cref="IRecorder"/> writing to <see cref="IVideoFileWriter"/>. /// </summary> /// <param name="videoWriter">The <see cref="IVideoFileWriter"/> to write to.</param> /// <param name="imageProvider">The image source.</param> /// <param name="frameRate">Video Frame Rate.</param> /// <param name="audioProvider">The audio source. null = no audio.</param> public Recorder(IVideoFileWriter videoWriter, IImageProvider imageProvider, int frameRate, IAudioProvider audioProvider = null) { _videoWriter = videoWriter ?? throw new ArgumentNullException(nameof(videoWriter)); _imageProvider = imageProvider ?? throw new ArgumentNullException(nameof(imageProvider)); _audioProvider = audioProvider; _cancellationTokenSource = new CancellationTokenSource(); _cancellationToken = _cancellationTokenSource.Token; if (frameRate <= 0) { throw new ArgumentException("Frame Rate must be possitive", nameof(frameRate)); } _frameRate = frameRate; _continueCapturing = new ManualResetEvent(false); if (videoWriter.SupportsAudio && audioProvider != null) { audioProvider.DataAvailable += AudioProvider_DataAvailable; } else { _audioProvider = null; } _sw = new Stopwatch(); _recordTask = Task.Factory.StartNew(async() => await DoRecord(), TaskCreationOptions.LongRunning); }
public void Append(IAudioProvider provider) { lock (_locker) { _providers.Add(provider); } }
/// <summary> /// Creates Real-Time FFT analyzer. /// </summary> /// <param name="source">Specified audio provider.</param> /// <param name="fftLength">Length of FFT.</param> public LiveFftAnalyzer(IAudioProvider source, int fftLength = 16384, bool real = true) { _real = real; FftLength = fftLength; _channels = source.ChannelCount(); if (!IsPowerOfTwo(fftLength)) { throw new ArgumentException("FFT Length must be a power of two"); } _m = (int)Math.Log(fftLength, 2.0); _fftLength = fftLength; FftPlan(_fftLength); _fftBuffer = new Complex[fftLength]; _fftArgs = new FftEventArgs(_fftBuffer); _source = source; _source.DataChunkRecieved += DataChunkRecieved; if (_source is IFloatProvider) { (_source as IFloatProvider).FloatChunkRecieved += FloatChunkRecieved; } WaveFormat = new WaveFormat(_source.SamplingRate(), _source.Bits(), _source.ChannelCount()); _converter = new FloatConverter(_source.SamplingRate(), _source.Bits(), _source.ChannelCount()); _step = _channels * _converter.Step(); }
IVideoFileWriter GetVideoFileWriter(IImageProvider ImgProvider, IAudioProvider AudioProvider) { if (VideoViewModel.SelectedVideoSourceKind == VideoSourceKind.NoVideo) { return(null); } IVideoFileWriter videoEncoder = null; var encoder = VideoViewModel.SelectedVideoWriter.GetVideoFileWriter(_currentFileName, Settings.FrameRate, Settings.VideoQuality, ImgProvider, Settings.AudioQuality, AudioProvider); switch (encoder) { case GifWriter gif: if (Settings.GifUnconstrained) { _recorder = new UnconstrainedFrameRateGifRecorder(gif, ImgProvider); } else { videoEncoder = gif; } break; default: videoEncoder = encoder; break; } return(videoEncoder); }
/// <summary> /// Setup audio playback. /// </summary> /// <param name="AudioOutput">The audio provider.</param> /// <param name="soundEnabled">Indicates if the sound playback is enabled or not.</param> /// <param name="frequency">The sound playback frequency in Hz. Preferred value is 44100 Hz</param> /// <param name="samplesCount">The buffer size in samples (bytes count / 2)</param> public static void SetupSoundPlayback(IAudioProvider AudioOutput, bool soundEnabled, int frequency, int samplesCount) { audio_playback_buffer_frequency = frequency; AudioOut = AudioOutput; SoundEnabled = soundEnabled; audio_playback_blipbuffer_size = samplesCount; x = x_1 = 0; }
/// <summary> /// Initiates this engine module using an <see cref="IAudioProvider"/> as a backend for selecting background soundtrack as well as the volume level for the sound. /// </summary> /// <param name="_p">A background soundtrack and volume provider.</param> /// <exception cref="ArgumentNullException">Thrown if <paramref name="_p"/> is null.</exception> public static void Init(IAudioProvider _p) { if (_p == null) { throw new ArgumentNullException("_p"); } _provider = _p; }
public BridgeRouter(IAudioProvider provider) { _locker = new object(); _routes = new HashSet <IPEndPoint>(); _provider = provider; _provider.Received += OnProviderReceived; }
public ManagedAudioProvider(IAudioProvider audioProvider) { if (audioProvider == null) { throw new ArgumentNullException("audioProvider"); } this._audioProvider = audioProvider; this._cacheTable = new ManagedAudioProvider.CacheEntry[4096]; }
/// <summary> /// Creates live audio recorder. /// </summary> /// <param name="provider">Specified audio provider.</param> public LiveAudioRecorder(IAudioProvider provider) { _provider = provider; _format = new WaveFormat(provider.SamplingRate(), provider.Bits(), provider.ChannelCount()); // must match the waveformat of the raw audio _bitRate = provider.Bits() * provider.ChannelCount() * provider.SamplingRate(); _provider.DataChunkRecieved += AudioChunkRecieved; }
IRecorder GetAudioRecorder(IAudioProvider AudioProvider) { var audioFileWriter = GetAudioFileWriter( FileName + extention, AudioProvider?.WaveFormat, 80); return(new AudioRecorder(audioFileWriter, AudioProvider)); }
internal Narrator(Random random, INarrationSettings settings, IAudioProviderFactory factory, ITextToAudioProvider textToAudioProvider, IActivityDisplayProvider activityDisplayProvider) { _settings = settings; _audioProvider = factory.Create(settings); _textToAudioProvider = textToAudioProvider; _random = random; _activityDisplayProvider = activityDisplayProvider; }
public MainPage() { InitializeComponent(); animatedControl.ClearColor = Colors.Transparent; animatedControl.TargetElapsedTime = TimeSpan.FromMilliseconds(16); // Make sure there are at least 60 frame per second. _audioProvider = new BassAudioPlayer(); //_audioProvider = new AudioGraphProvider(); }
public BeatboxModel(int nbPad, IAudioProvider audioProvider) { var recorder = audioProvider.GetRecorder(); for (var i = 0; i < nbPad; i++) { var player = audioProvider.CreatePlayer(); Sounds.Add(new SoundModel(player, recorder)); } }
async void Dispose(bool TerminateRecord) { if (_disposed) { return; } _disposed = true; _cancellationTokenSource.Cancel(); // Resume record loop if paused so it can exit _continueCapturing.Set(); // Ensure all threads exit before disposing resources. if (TerminateRecord) { _recordTask.Wait(); } try { if (_frameWriteTask != null) { await _frameWriteTask; } } catch { } try { if (_audioWriteTask != null) { await _audioWriteTask; } } catch { } if (_audioProvider != null) { _audioProvider.Stop(); _audioProvider.Dispose(); _audioProvider = null; } _imageProvider?.Dispose(); _imageProvider = null; _videoWriter.Dispose(); _videoWriter = null; _audioBuffer = _silenceBuffer = null; _continueCapturing.Dispose(); }
private void Dispose(bool terminateRecord) { if (_disposed) { return; } _disposed = true; if (_audioProvider != null) { _audioProvider.DataAvailable -= AudioProvider_DataAvailable; _audioProvider.Stop(); _audioProvider.Dispose(); _audioProvider = null; } if (_videoWriter != null) { _cancellationTokenSource.Cancel(); // Resume record loop if paused so it can exit _continueCapturing.Set(); if (terminateRecord) { _recordTask.Wait(); } try { if (_task != null && !_task.IsCompleted) { _task.GetAwaiter().GetResult(); } } catch { // Ignored in dispose } _videoWriter.Dispose(); _videoWriter = null; _continueCapturing.Dispose(); } else { _audioWriter.Dispose(); _audioWriter = null; } _imageProvider?.Dispose(); _imageProvider = null; }
private int Read(IAudioProvider provider, float[] buffer) { if (!_samples.TryGetValue(provider, out var samples)) { return(0); } Array.Copy(samples.ToArray(), buffer, buffer.Length); return(buffer.Length); }
public void StartRecoding(String savePath) { FileSavePath = savePath + "BAR-" + DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss") + ".avi"; //图像 IImageProvider imgProvider = null; try { imgProvider = GetImageProvider(); } catch (Exception e) { MessageBox.Show(e.Message); imgProvider?.Dispose(); return; } //声音 IAudioProvider audioProvider = null; try { Settings.Audio.Enabled = true; if (Settings.Audio.Enabled && !Settings.Audio.SeparateFilePerSource) { audioProvider = _audioSource.GetMixedAudioProvider(); } } catch (Exception e) { MessageBox.Show(e.Message); _audioSource?.Dispose(); return; } //视频写入 IVideoFileWriter videoEncoder; try { videoEncoder = GetVideoFileWriterWithPreview(imgProvider, audioProvider); } catch (Exception e) { MessageBox.Show(e.Message); imgProvider?.Dispose(); audioProvider?.Dispose(); return; } _recorder = new Recorder(videoEncoder, imgProvider, Settings.Video.FrameRate, audioProvider); _recorder.Start(); }
IVideoFileWriter GetVideoFileWriterWithPreview(IImageProvider ImgProvider, IAudioProvider AudioProvider) { if (_videoViewModel.SelectedVideoSourceKind is NoVideoSourceProvider) { return(null); } _previewWindow.Init(ImgProvider.Width, ImgProvider.Height); return(new WithPreviewWriter(GetVideoFileWriter(ImgProvider, AudioProvider, FileSavePath), _previewWindow)); }
public void StopMusic() { if (_currentState == SpotifyState.Playing) { _currentState = SpotifyState.LoggedIn; Spotify.StopMusic(); StopStream(_streamKey); LogOut(); _provider = null; } }
private void FormFourier_FormClosed(object sender, FormClosedEventArgs e) { if (_Reader != null) { _Reader.Dispose(); _Reader = null; } if (_Provider != null) { _Provider.Dispose(); _Provider = null; } }
public void SetupSoundPlayback(IAudioProvider AudioOutput, bool soundEnabled, int frequency, int bufferSize, int latencyInBytes) { audio_playback_latency = latencyInBytes; audio_playback_bufferSize = bufferSize; audio_playback_frequency = frequency; audio_playback_sampleReload = audio_playback_samplePeriod / audio_playback_frequency; AudioOut = AudioOutput; SoundEnabled = soundEnabled; x = x_1 = y = y_1 = 0; audio_playback_first_render = true; audio_playback_buffer = new byte[audio_playback_bufferSize]; }
public HITThread(uint TrackID, HITVM VM, HITResourceGroup Src) { this.VM = VM; ResGroup = Src; Owners = new List <int>(); Notes = new List <HITNoteEntry>(); NotesByChannel = new Dictionary <SoundEffectInstance, HITNoteEntry>(); audContent = Content.Content.Get().Audio; SetTrack(TrackID); SimpleMode = true; PlaySimple = true; //play next frame, so we have time to set volumes. }
/// <summary> /// Initializes a new AudioEffect class. /// </summary> /// <param name="audioSource">The AudioSource.</param> public AudioEffect(AudioSource audioSource) { AudioSource = audioSource; var audioInitializer = SGL.QueryComponents<AudioManager>().AudioInitializer; var logger = LogManager.GetClassLogger(); if (audioInitializer == null) { logger.Warn("The specified audio initializer was null."); } else if (!audioInitializer.IsSupported) { logger.Warn("The specified AudioProvider is not supported."); } else { _audioProvider = audioInitializer.Create(); _audioProvider.PlaybackChanged += PlaybackChanged; } }
private async void AudioProvider_StateChanged(IAudioProvider sender, AudioPlayerPlayState e) { await UpdateAudioState(); }
private async void AudioProvider_TrackChanged(IAudioProvider sender, QuranAudioTrack request) { await UpdateAudioState(); }