コード例 #1
0
ファイル: AviManager.cs プロジェクト: paradoxfm/ledx2
		/// <summary>Getthe first wave audio stream</summary>
		/// <returns>AudioStream object for the stream</returns>
		public AudioStream GetWaveStream() {
			IntPtr aviStream;

			int result = Avi.AVIFileGetStream(
				aviFile,
				out aviStream,
				Avi.streamtypeAUDIO, 0);

			if (result != 0) {
				throw new Exception("Exception in AVIFileGetStream: " + result.ToString());
			}

			AudioStream stream = new AudioStream(aviFile, aviStream);
			streams.Add(stream);
			return stream;
		}
コード例 #2
0
ファイル: AviManager.cs プロジェクト: paradoxfm/ledx2
		/// <summary>Add an existing wave audio stream to the file</summary>
		/// <param name="newStream">The stream to add</param>
		/// <param name="startAtFrameIndex">
		/// The index of the video frame at which the sound is going to start.
		/// '0' inserts the sound at the beginning of the video.
		/// </param>
		public void AddAudioStream(AudioStream newStream, int startAtFrameIndex) {
			Avi.AVISTREAMINFO streamInfo = new Avi.AVISTREAMINFO();
			Avi.PCMWAVEFORMAT streamFormat = new Avi.PCMWAVEFORMAT();
			int streamLength = 0;

			IntPtr rawData = newStream.GetStreamData(ref streamInfo, ref streamFormat, ref streamLength);
			IntPtr waveData = rawData;

			if (startAtFrameIndex > 0) {
				//not supported
				//streamInfo.dwStart = startAtFrameIndex;

				double framesPerSecond = GetVideoStream().FrameRate;
				double samplesPerSecond = newStream.CountSamplesPerSecond;
				double startAtSecond = startAtFrameIndex / framesPerSecond;
				int startAtSample = (int)(samplesPerSecond * startAtSecond);

				waveData = InsertSilence(startAtSample - 1, waveData, streamLength, ref streamInfo);
			}

			IntPtr aviStream;
			int result = Avi.AVIFileCreateStream(aviFile, out aviStream, ref streamInfo);
			if (result != 0) {
				throw new Exception("Exception in AVIFileCreateStream: " + result.ToString());
			}

			result = Avi.AVIStreamSetFormat(aviStream, 0, ref streamFormat, Marshal.SizeOf(streamFormat));
			if (result != 0) {
				throw new Exception("Exception in AVIStreamSetFormat: " + result.ToString());
			}

			result = Avi.AVIStreamWrite(aviStream, 0, streamLength, waveData, streamLength, Avi.AVIIF_KEYFRAME, 0, 0);
			if (result != 0) {
				throw new Exception("Exception in AVIStreamWrite: " + result.ToString());
			}

			result = Avi.AVIStreamRelease(aviStream);
			if (result != 0) {
				throw new Exception("Exception in AVIStreamRelease: " + result.ToString());
			}

			Marshal.FreeHGlobal(waveData);
		}