public static AudioTrackLayoutDmAs11Type fromValue(String v) { for (AudioTrackLayoutDmAs11Type c: AudioTrackLayoutDmAs11Type.values()) { if (c.value.equals(v)) { return c; } } throw new IllegalArgumentException(v); }
/** * Returns numbers of tracks required for pointed in metadata.xml Audio Layout. * * @return the number of audio tracks. */ public int getEBUAudioTracks() { //How many channels we should provide for particular EBU option. switch (audioLayout) { case EBU_R_48_2_A: case EBU_R_123_4_B: case EBU_R_123_4_C: return 4; case EBU_R_123_16_C: case EBU_R_123_16_D: case EBU_R_123_16_F: return 16; default: // Unknown layout throw new ConversionException( String.format("metadata.xml defined unknown audio layout as \"%s\".", audioLayout.value())); } }
private AudioMapType createAudioMap() throws InvalidAudioChannelAssignmentException { switch (audioLayout) { case EBU_R_48_2_A: return processR482A(); case EBU_R_123_4_B: case EBU_R_123_4_C: return processR1234B4C(); case EBU_R_123_16_C: return processR12316C(); case EBU_R_123_16_D: return processR12316D(); case EBU_R_123_16_F: return processR12316F(); default: throw new RuntimeException("Unknown audio track allocation: " + audioLayout.toString()); } }
public static AudioTrackLayoutDmAs11Type fromValue(String v) { for (AudioTrackLayoutDmAs11Type c: AudioTrackLayoutDmAs11Type.values()) { if (c.value.equals(v)) { return c; } } throw new IllegalArgumentException(v); }
private Integer getChannelCountToMap() { //Count mapped audio channels Integer mappedChannelCount = audioMap.getEBUTrack().size(); //How many channels we need to map Integer channelCountToMap = getEBUAudioTracks(); if (mappedChannelCount > channelCountToMap) { throw new ConversionException( String.format( "metadata.xml defined audio layout as \"%s\" that has %d tracks. Mapped channel count is greater than 4.", audioLayout.value(), channelCountToMap)); } return channelCountToMap; } }
private AudioMapType processR1234B4C() throws InvalidAudioChannelAssignmentException { AudioMapType audioMap = new AudioMapType(); List<SoundfieldGroupInfo> foundStereo = findInputForChannelGroup(STEREO_LAYOUT); // we expect one or two stereo if (foundStereo.isEmpty() || foundStereo.size() > 2) { throw new InvalidAudioChannelAssignmentException( String.format("Expected one or two stereo for %s and %s", EBU_R_123_4_B.value(), EBU_R_123_4_C.value())); } addStereo(audioMap, 1, foundStereo.get(0)); // final stereo if (foundStereo.size() == 2) { addStereo(audioMap, 3, foundStereo.get(1)); // M&E stereo } else { addStereoSilence(audioMap, 3); } return audioMap; }
private AudioMapType processR482A() throws InvalidAudioChannelAssignmentException { AudioMapType audioMap = new AudioMapType(); List<SoundfieldGroupInfo> foundStereo = findInputForChannelGroup(STEREO_LAYOUT); // use the first found stereo pair if (foundStereo.isEmpty()) { throw new InvalidAudioChannelAssignmentException( String.format("Expected at least one stereo for %s", EBU_R_48_2_A.value())); } addStereo(audioMap, 1, foundStereo.get(0)); addStereoSilence(audioMap, 3); return audioMap; }
private AudioMapType processR12316C() throws InvalidAudioChannelAssignmentException { AudioMapType audioMap = new AudioMapType(); List<SoundfieldGroupInfo> foundStereo = findInputForChannelGroup(STEREO_LAYOUT); List<SoundfieldGroupInfo> found51 = findInputForChannelGroup(SURROUND_5_1_LAYOUT); // we expect one or two stereo and one 5.1 if (foundStereo.isEmpty() || foundStereo.size() > 2) { throw new InvalidAudioChannelAssignmentException( String.format("Expected one or two stereo for %s", EBU_R_123_16_C.value())); } if (found51.isEmpty() || found51.size() > 2) { throw new InvalidAudioChannelAssignmentException( String.format("Expected one or two 5.1 for %s", EBU_R_123_16_C.value())); } addStereo(audioMap, 1, foundStereo.get(0)); // final stereo if (foundStereo.size() == 2 && found51.size() == 2) { addStereo(audioMap, 3, foundStereo.get(1)); // M&E stereo } else { addStereoSilence(audioMap, 3); } add51(audioMap, 5, found51.get(0)); // final 51 if (foundStereo.size() == 2 && found51.size() == 2) { add51(audioMap, 11, found51.get(1)); // M&E 5.1 } else { add51Silence(audioMap, 11); } return audioMap; }
private AudioMapType processR12316D() throws InvalidAudioChannelAssignmentException { AudioMapType audioMap = new AudioMapType(); List<SoundfieldGroupInfo> found51 = findInputForChannelGroup(SURROUND_5_1_LAYOUT); // we expect exactly two 5.1 with different languages if (found51.size() != 2) { throw new InvalidAudioChannelAssignmentException( String.format("Expected exactly two 5.1 for %s", EBU_R_123_16_D.value())); } // get languages (all sequences from a soundfield group must have the same language): SoundfieldGroupInfo first51 = found51.get(0); SoundfieldGroupInfo second51 = found51.get(1); String firstLanguage = getLanguage(first51); String secondLanguage = getLanguage(second51); // languages must be different if (firstLanguage == null || secondLanguage == null || firstLanguage.equals(secondLanguage)) { throw new InvalidAudioChannelAssignmentException( String.format("Expected two 5.1 with different languages for %s", EBU_R_123_16_D.value())); } add51(audioMap, 1, first51); // 5.1 first language addStereoSilence(audioMap, 7); add51(audioMap, 9, second51); // 5.1 second language addStereoSilence(audioMap, 15); return audioMap; }