GetChannel

From Avisynth wiki
(Difference between revisions)
Jump to: navigation, search
(formatting, links, phrasing)
m (one more touch-up)
(3 intermediate revisions by one user not shown)
Line 1: Line 1:
 
<div style="max-width:68em" >
 
<div style="max-width:68em" >
{{Func3Def
+
{{Func4Def
 
|GetChannel(clip ''clip'', int ''ch1'' [, int ''ch2'', ...] )
 
|GetChannel(clip ''clip'', int ''ch1'' [, int ''ch2'', ...] )
 +
|GetChannels(clip ''clip'', int ''ch1'' [, int ''ch2'', ...] )
 
|GetLeftChannel(clip ''clip'')
 
|GetLeftChannel(clip ''clip'')
 
|GetRightChannel(clip ''clip'')
 
|GetRightChannel(clip ''clip'')
Line 7: Line 8:
  
 
*'''GetChannel''' returns one or more channels of a multichannel signal.  
 
*'''GetChannel''' returns one or more channels of a multichannel signal.  
*'''GetLeftChannel''' returns the left and '''GetRightChannel''' the right channel from a stereo signal.  
+
*'''GetLeftChannel''' returns the left channel from a stereo signal, and '''GetRightChannel''' returns the right.  
*'''GetChannels''' is an alias to '''GetChannel''' and can be used interchangeably.  
+
*'''GetChannels''' is an alias for '''GetChannel''' and can be used interchangeably.  
  
  
Line 18: Line 19:
 
! colspan="2" style="text-align:left" |&nbsp; WAV, 2 channels (stereo)&nbsp;
 
! colspan="2" style="text-align:left" |&nbsp; WAV, 2 channels (stereo)&nbsp;
 
|-
 
|-
| 1 || left channel
+
|style="width:2em"| 1 || left
 
|-
 
|-
| 2 || right channel
+
| 2 || right
 
|}
 
|}
  
Line 26: Line 27:
 
|-
 
|-
 
! colspan="2" style="text-align:left" |&nbsp; WAV, 5.1 channels&nbsp;
 
! colspan="2" style="text-align:left" |&nbsp; WAV, 5.1 channels&nbsp;
|-| 1 || front left channel
 
 
|-
 
|-
| 2 || front right channel 
+
|style="width:2em"| 1 || front left
 
|-
 
|-
| 3 || front center channel
+
| 2 || front right
 +
|-
 +
| 3 || front center
 
|-
 
|-
 
| 4 || LFE (Low Frequency Enhancement; Subwoofer)
 
| 4 || LFE (Low Frequency Enhancement; Subwoofer)
 
|-
 
|-
| 5 || rear left channel
+
| 5 || rear left
 
|-
 
|-
| 6 || rear right channel
+
| 6 || rear right
 
|}
 
|}
 
</div>
 
</div>
 +
 +
 +
==== Remarks ====
 +
<div style="max-width:68em" >
 +
Every file format has a different internal channel ordering. The following table gives this internal ordering for some formats (useful for plugin writers), but it is the decoder's task to return the expected channel order. If you use decoders like [[NicAudio]]/[[BassAudio]] or [[Ffdshow|ffdshow]]/[http://www.ac3filter.net/ AC3Filter] you don't need to worry about this.
 +
</div>
 +
 +
:{|class="wikitable"
 +
! Format !! Channel 1 !! Channel 2 !! Channel 3 !! Channel 4 !! Channel 5 !! Channel 6
 +
|-
 +
| [http://www.cs.bath.ac.uk/~jpff/NOS-DREAM/researchdev/wave-ex/wave_ex.html 5.1 WAV]
 +
| front left
 +
| front right
 +
| front center&nbsp;
 +
| LFE
 +
| rear left
 +
| rear right
 +
|-
 +
| [https://web.archive.org/web/20051108165008/http://www.atsc.org/standards/a_52a.pdf 5.1 AC3]
 +
| front left
 +
| front center&nbsp;
 +
| front right
 +
| rear left
 +
| rear right&nbsp;
 +
| LFE
 +
|-
 +
| [http://www.etsi.org/deliver/etsi_ts/102100_102199/102114/01.01.01_60/ts_102114v010101p.pdf 5.1 DTS] {{BoldColor|blue|100|&sup1;}}
 +
| front center&nbsp;
 +
| front left
 +
| front right
 +
| rear left
 +
| rear right
 +
| LFE
 +
|-
 +
| [http://web.archive.org/web/20070830151620/http://www.hydrogenaudio.org/forums/index.php?showtopic=10986 5.1 AAC] {{BoldColor|blue|100|&sup2;}}
 +
| front center&nbsp;
 +
| front left
 +
| front right
 +
| rear left
 +
| rear right
 +
| LFE
 +
|-
 +
| [http://web.archive.org/web/20030817071619/http://preserve.harvard.edu/standards/Audio%20IFF%20Specification%201%203.pdf 5.1 AIFF]
 +
| front left
 +
| rear left
 +
| front center&nbsp;
 +
| front right&nbsp;
 +
| rear right
 +
| LFE
 +
|-
 +
| [http://flac.sourceforge.net/format.html 5.1 FLAC]
 +
| front left
 +
| front right
 +
| front center&nbsp;
 +
| LFE
 +
| rear left
 +
| rear right&nbsp;
 +
|-
 +
| [http://lists.mplayerhq.hu/pipermail/mplayer-users/2006-October/063511.html 5.1 WMA] &nbsp;
 +
| front left
 +
| front right
 +
| front center&nbsp;
 +
| LFE
 +
| rear left
 +
| rear right&nbsp;
 +
|-
 +
|colspan="7"|
 +
{{BoldColor|blue|100|&sup1;}} 5.1 DTS: the LFE is on a separate stream (much like on multichannel MPEG2).<br>
 +
{{BoldColor|blue|100|&sup2;}} There is no free version of the AAC specification available online.
 +
|}
 +
  
 
==== Examples ====
 
==== Examples ====
* Removes right channel information, and return as mono clip with only left channel:
+
* Get mono audio from left channel of a WAV file,
 +
<div {{ListItemContinue}} >
 +
and dub to video from AVI:
 +
</div>
 
<div {{BoxWidthIndent|36|2}} >
 
<div {{BoxWidthIndent|36|2}} >
  video = [[AviSource]]("c:\filename.avi")
+
  video = [[AviSource]]("c:\video.avi")
  stereo = [[WavSource]]("c:\afx-ab3_t4.wav")
+
  stereo = [[WavSource]]("c:\audio2ch.wav")
 
  mono = GetLeftChannel(stereo)
 
  mono = GetLeftChannel(stereo)
 
  return [[AudioDub]](video, mono)
 
  return [[AudioDub]](video, mono)
Line 51: Line 127:
 
* Do the same, alternate syntax:
 
* Do the same, alternate syntax:
 
<div {{BoxWidthIndent|36|2}} >
 
<div {{BoxWidthIndent|36|2}} >
  video = AviSource("c:\filename.avi")
+
  video = AviSource("c:\video.avi")
  stereo = WavSource("c:\afx-ab3_t4.wav")
+
  stereo = WavSource("c:\audio2ch.wav")
 
  mono = GetChannel(stereo, 1)
 
  mono = GetChannel(stereo, 1)
 
  return AudioDub(video, mono)
 
  return AudioDub(video, mono)
 
</div>
 
</div>
  
* You could also obtain the channels from the AVI file itself:
+
* Do the same with the audio channels from the AVI file itself:
 
<div {{BoxWidthIndent|36|2}} >
 
<div {{BoxWidthIndent|36|2}} >
  video = AviSource("c:\filename.avi")
+
  video = AviSource("c:\video+audio2ch.avi")
 
  return GetChannel(video, 1)
 
  return GetChannel(video, 1)
 
</div>
 
</div>
  
* Converts AVI with 5.1 audio to a stereo signal
+
* Convert AVI with 5.1 audio to stereo (copy ''front left'' and ''front right'')
 
<div {{ListItemContinue}} >
 
<div {{ListItemContinue}} >
(But see below for channel ordering, and [http://forum.doom9.org/showthread.php?p=1243880#post1243880 here] for more complex downmix functions.)
+
(But see [[#Remarks|Remarks]] for channel ordering, and examples below and [http://forum.doom9.org/showthread.php?p=1243880#post1243880 here] for more complex downmix functions.)
 
</div>
 
</div>
 
<div {{BoxWidthIndent|36|2}} >
 
<div {{BoxWidthIndent|36|2}} >
  video = AviSource("c:\divx_51.avi")
+
  video = AviSource("c:\video+audio6ch.avi")
 
  stereo = GetChannel(video, 1, 2)
 
  stereo = GetChannel(video, 1, 2)
 
  return AudioDub(video, stereo)
 
  return AudioDub(video, stereo)
 
</div>
 
</div>
  
* Converts AVI with "uncompressed 5.1 wav" audio to a stereo signal:
+
* Get ''front left'' and ''front right'' audio from a 5.1 AVI:
 
<div {{BoxWidthIndent|36|2}} >
 
<div {{BoxWidthIndent|36|2}} >
  video = AviSource("c:\divx_wav.avi")
+
  video = AviSource("c:\video+audio6ch.avi")
  audio = WavSource("c:\divx_wav.avi")
+
  audio = WavSource("c:\video+audio6ch.avi")
 
  stereo = GetChannel(audio, 1, 2)
 
  stereo = GetChannel(audio, 1, 2)
 
  return AudioDub(video, stereo)
 
  return AudioDub(video, stereo)
 
</div>
 
</div>
  
==== Remarks ====
+
* Mix 5.1 to stereo - see discussion [http://forum.doom9.org/showthread.php?p=1735072#post1735072 here].
<div style="max-width:68em" >
+
<div {{ListItemContinue}} >
Every file format has a different internal channel ordering. The following table gives this internal ordering for some formats (useful for plugin writers), but it is the decoder's task to return the expected (WAV) channel order. If you use decoders like [[NicAudio]]/BassAudio or [[Ffdshow|ffdshow]]/AC3_filter you don't need to worry about this.
+
Note returned audio has sample type [[Float]].<br>
 +
[[Normalize]] is recommended before [[ConvertAudio|converting to 16-bit]] to avoid possible overload.
 +
</div>
 +
<div {{BoxWidthIndent|36|2}} >
 +
AviSource("c:\video+audio6ch.avi")
 +
DownMix
 +
[[Normalize]]
 +
[[ConvertAudioTo16bit]]
 +
return Last
 +
function DownMix(clip a,
 +
\    float "centergain", float "surroundgain")
 +
{
 +
    a.[[ConvertAudioToFloat]]
 +
 +
    ## 5.1 WAV channel layout:
 +
    fl = GetChannel(1)
 +
    fr = GetChannel(2)
 +
    fc = GetChannel(3)
 +
    lf = GetChannel(4) ## (LFE not used)
 +
    sl = GetChannel(5)
 +
    sr = GetChannel(6)
 +
 +
    ## add center
 +
    gc = Default(centergain, 1.0) * 0.7071
 +
    fl = MixAudio(fl, fc, 1.0, gc)
 +
    fr = MixAudio(fr, fc, 1.0, gc)
 +
 +
    ## add surround
 +
    gs = Default(surroundgain, 1.0) * 0.7071
 +
    fl = [[MixAudio]](fl, sl, 1.0, gs)
 +
    fr = MixAudio(fr, sr, 1.0, gs)
 +
 +
    return [[AudioDub]](a, [[MergeChannels]](fl, fr))
 +
}
 
</div>
 
</div>
 
:{|class="wikitable"
 
! Format !! Channel 1 !! Channel 2 !! Channel 3 !! Channel 4 !! Channel 5 !! Channel 6
 
|-
 
| [http://www.cs.bath.ac.uk/~jpff/NOS-DREAM/researchdev/wave-ex/wave_ex.html 5.1 WAV]
 
| front left channel
 
| front right channel
 
| front center channel&nbsp;
 
| LFE
 
| rear left channel
 
| rear right channel
 
|-
 
| [https://web.archive.org/web/20051108165008/http://www.atsc.org/standards/a_52a.pdf 5.1 AC3]
 
| front left channel
 
| front center channel&nbsp;
 
| front right channel
 
| rear left channel
 
| rear right channel&nbsp;
 
| LFE
 
|-
 
| [http://www.etsi.org/deliver/etsi_ts/102100_102199/102114/01.01.01_60/ts_102114v010101p.pdf 5.1 DTS]
 
| front center channel&nbsp;
 
| front left channel
 
| front right channel
 
| rear left channel
 
| rear right channel
 
| LFE
 
|-
 
| [http://web.archive.org/web/20070830151620/http://www.hydrogenaudio.org/forums/index.php?showtopic=10986 5.1 AAC]
 
| front center channel&nbsp;
 
| front left channel
 
| front right channel
 
| rear left channel
 
| rear right channel
 
| LFE
 
|-
 
| [http://web.archive.org/web/20030817071619/http://preserve.harvard.edu/standards/Audio%20IFF%20Specification%201%203.pdf 5.1 AIFF]
 
| front left channel
 
| rear left channel
 
| front center channel&nbsp;
 
| front right channel&nbsp;
 
| rear right channel
 
| LFE
 
|-
 
| [http://flac.sourceforge.net/format.html 5.1 FLAC]
 
| front left channel
 
| front right channel
 
| front center channel&nbsp;
 
| LFE
 
| rear left channel
 
| rear right channel&nbsp;
 
|-
 
| [http://lists.mplayerhq.hu/pipermail/mplayer-users/2006-October/063511.html 5.1 WMA] &nbsp;
 
| front left channel
 
| front right channel
 
| front center channel&nbsp;
 
| LFE
 
| rear left channel
 
| rear right channel&nbsp;
 
|}
 
 
* 5.1 DTS: the LFE is on a separate stream (much like on multichannel MPEG2).
 
* A free version of the AAC specifications are unavailable online.
 
  
  
 
[[Category:Internal filters]]
 
[[Category:Internal filters]]
 
[[Category:Audio_filters]]
 
[[Category:Audio_filters]]

Revision as of 14:49, 15 February 2016

GetChannel(clip clip, int ch1 [, int ch2, ...] )
GetChannels(clip clip, int ch1 [, int ch2, ...] )
GetLeftChannel(clip clip)
GetRightChannel(clip clip)

  • GetChannel returns one or more channels of a multichannel signal.
  • GetLeftChannel returns the left channel from a stereo signal, and GetRightChannel returns the right.
  • GetChannels is an alias for GetChannel and can be used interchangeably.


The ordering of the channels is determined by the ordering of the input file, because AviSynth doesn't assume any ordering (see Remarks).

In case of WAV files, the ordering should be as follows:

  WAV, 2 channels (stereo) 
1 left
2 right
  WAV, 5.1 channels 
1 front left
2 front right
3 front center
4 LFE (Low Frequency Enhancement; Subwoofer)
5 rear left
6 rear right


Remarks

Every file format has a different internal channel ordering. The following table gives this internal ordering for some formats (useful for plugin writers), but it is the decoder's task to return the expected channel order. If you use decoders like NicAudio/BassAudio or ffdshow/AC3Filter you don't need to worry about this.

Format Channel 1 Channel 2 Channel 3 Channel 4 Channel 5 Channel 6
5.1 WAV front left front right front center  LFE rear left rear right
5.1 AC3 front left front center  front right rear left rear right  LFE
5.1 DTS ¹ front center  front left front right rear left rear right LFE
5.1 AAC ² front center  front left front right rear left rear right LFE
5.1 AIFF front left rear left front center  front right  rear right LFE
5.1 FLAC front left front right front center  LFE rear left rear right 
5.1 WMA   front left front right front center  LFE rear left rear right 

¹ 5.1 DTS: the LFE is on a separate stream (much like on multichannel MPEG2).
² There is no free version of the AAC specification available online.


Examples

  • Get mono audio from left channel of a WAV file,

and dub to video from AVI:

video = AviSource("c:\video.avi")
stereo = WavSource("c:\audio2ch.wav")
mono = GetLeftChannel(stereo)
return AudioDub(video, mono)
  • Do the same, alternate syntax:
video = AviSource("c:\video.avi")
stereo = WavSource("c:\audio2ch.wav")
mono = GetChannel(stereo, 1)
return AudioDub(video, mono)
  • Do the same with the audio channels from the AVI file itself:
video = AviSource("c:\video+audio2ch.avi")
return GetChannel(video, 1)
  • Convert AVI with 5.1 audio to stereo (copy front left and front right)

(But see Remarks for channel ordering, and examples below and here for more complex downmix functions.)

video = AviSource("c:\video+audio6ch.avi")
stereo = GetChannel(video, 1, 2)
return AudioDub(video, stereo)
  • Get front left and front right audio from a 5.1 AVI:
video = AviSource("c:\video+audio6ch.avi")
audio = WavSource("c:\video+audio6ch.avi")
stereo = GetChannel(audio, 1, 2)
return AudioDub(video, stereo)
  • Mix 5.1 to stereo - see discussion here.

Note returned audio has sample type Float.
Normalize is recommended before converting to 16-bit to avoid possible overload.

AviSource("c:\video+audio6ch.avi")
DownMix
Normalize
ConvertAudioTo16bit
return Last
function DownMix(clip a, 
\     float "centergain", float "surroundgain")
{
   a.ConvertAudioToFloat

   ## 5.1 WAV channel layout:
   fl = GetChannel(1)
   fr = GetChannel(2)
   fc = GetChannel(3)
   lf = GetChannel(4) ## (LFE not used)
   sl = GetChannel(5)
   sr = GetChannel(6)

   ## add center
   gc = Default(centergain, 1.0) * 0.7071
   fl = MixAudio(fl, fc, 1.0, gc)
   fr = MixAudio(fr, fc, 1.0, gc)

   ## add surround
   gs = Default(surroundgain, 1.0) * 0.7071
   fl = MixAudio(fl, sl, 1.0, gs)
   fr = MixAudio(fr, sr, 1.0, gs)

   return AudioDub(a, MergeChannels(fl, fr))
}
Personal tools