Example #1
0
File: Player.cs Project: daisy/obi
        // Called when new audio is passed to player for playback.
        // Initializes all asset dependent members excluding stream dependent members
        private void InitAudio(urakawa.media.data.audio.AudioMediaData audio)
        {
            this.audio = audio;
            WaveFormat        format = new WaveFormat();
            BufferDescription desc   = new BufferDescription();

            urakawa.media.data.audio.PCMFormatInfo info = audio.getPCMFormat();
            this.frameSize  = info.getBlockAlign();
            this.channels   = info.getNumberOfChannels();
            this.sampleRate = (int)info.getSampleRate();
            format.AverageBytesPerSecond = (int)info.getSampleRate() * info.getBlockAlign();
            format.BitsPerSample         = Convert.ToInt16(info.getBitDepth());
            format.BlockAlign            = Convert.ToInt16(info.getBlockAlign());
            format.Channels         = Convert.ToInt16(info.getNumberOfChannels());
            format.FormatTag        = WaveFormatTag.Pcm;
            format.SamplesPerSecond = (int)info.getSampleRate();
            desc.Format             = format;
            this.bufferSize         = format.AverageBytesPerSecond;
            this.refreshLength      = this.bufferSize / 2;
            desc.BufferBytes        = this.bufferSize;
            desc.GlobalFocus        = true;
            this.soundBuffer        = new SecondaryBuffer(desc, this.device);
            this.pausePosition      = 0;
            this.previousPosition   = 0;
        }
Example #2
0
File: Player.cs Project: daisy/obi
 /// <summary>
 /// Play an asset from a specified time position its to end
 /// </summary>
 public void Play(urakawa.media.data.audio.AudioMediaData audio, double from)
 {
     if (this.state == PlayerState.Stopped || this.state == PlayerState.Paused)
     {
         if (audio != null && audio.getAudioDuration().getTimeDeltaAsMillisecondFloat() > 0)
         {
             urakawa.media.data.audio.PCMFormatInfo info = audio.getPCMFormat();
             int position = CalculationFunctions.AdaptToFrame(
                 CalculationFunctions.ConvertTimeToByte(from, (int)info.getSampleRate(), info.getBlockAlign()),
                 info.getBlockAlign());
             if (position >= 0 && position <= audio.getPCMLength())
             {
                 this.startPosition = position;
                 InitPlay(audio, position, 0);
             }
             else
             {
                 throw new Exception("Start Position is out of bounds of Audio Asset");
             }
         }
     }
 }