mirror of
https://github.com/DSheirer/sdrtrunk.git
synced 2026-11-12 08:37:25 -05:00
465 Wave Recording Audio Metadata (#473)
* Initial work on updating wave audio metadata to use identifier collection. * Cleanup
This commit is contained in:
@@ -402,7 +402,7 @@ public class AliasList implements Listener<AliasEvent>
|
||||
|
||||
while(it.hasNext())
|
||||
{
|
||||
if(it.next().getKey().equals(alias))
|
||||
if(it.next().getValue().equals(alias))
|
||||
{
|
||||
it.remove();
|
||||
}
|
||||
@@ -416,7 +416,7 @@ public class AliasList implements Listener<AliasEvent>
|
||||
public class TalkgroupAliasList
|
||||
{
|
||||
private Map<Integer,Alias> mTalkgroupAliasMap = new TreeMap<>();
|
||||
private Map<TalkgroupRange, Alias> mTalkgroupRangeMap = new HashMap<>();
|
||||
private Map<TalkgroupRange, Alias> mTalkgroupRangeAliasMap = new HashMap<>();
|
||||
|
||||
public TalkgroupAliasList()
|
||||
{
|
||||
@@ -431,11 +431,11 @@ public class AliasList implements Listener<AliasEvent>
|
||||
return mTalkgroupAliasMap.get(value);
|
||||
}
|
||||
|
||||
for(TalkgroupRange talkgroupRange: mTalkgroupRangeMap.keySet())
|
||||
for(TalkgroupRange talkgroupRange: mTalkgroupRangeAliasMap.keySet())
|
||||
{
|
||||
if(talkgroupRange.contains(value))
|
||||
{
|
||||
return mTalkgroupRangeMap.get(talkgroupRange);
|
||||
return mTalkgroupRangeAliasMap.get(talkgroupRange);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -449,7 +449,7 @@ public class AliasList implements Listener<AliasEvent>
|
||||
|
||||
public void add(TalkgroupRange talkgroupRange, Alias alias)
|
||||
{
|
||||
mTalkgroupRangeMap.put(talkgroupRange, alias);
|
||||
mTalkgroupRangeAliasMap.put(talkgroupRange, alias);
|
||||
}
|
||||
|
||||
public void remove(Talkgroup talkgroup)
|
||||
@@ -459,7 +459,7 @@ public class AliasList implements Listener<AliasEvent>
|
||||
|
||||
public void remove(TalkgroupRange talkgroupRange)
|
||||
{
|
||||
mTalkgroupRangeMap.remove(talkgroupRange);
|
||||
mTalkgroupRangeAliasMap.remove(talkgroupRange);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -468,7 +468,7 @@ public class AliasList implements Listener<AliasEvent>
|
||||
public void remove(Alias alias)
|
||||
{
|
||||
AliasList.remove(alias, mTalkgroupAliasMap);
|
||||
AliasList.remove(alias, mTalkgroupRangeMap);
|
||||
AliasList.remove(alias, mTalkgroupRangeAliasMap);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +1,49 @@
|
||||
/*
|
||||
* ******************************************************************************
|
||||
* sdrtrunk
|
||||
* Copyright (C) 2014-2018 Dennis Sheirer
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
* *****************************************************************************
|
||||
*/
|
||||
|
||||
package io.github.dsheirer.record.wave;
|
||||
|
||||
import io.github.dsheirer.alias.Alias;
|
||||
import io.github.dsheirer.alias.AliasList;
|
||||
import io.github.dsheirer.identifier.Form;
|
||||
import io.github.dsheirer.identifier.Identifier;
|
||||
import io.github.dsheirer.identifier.IdentifierClass;
|
||||
import io.github.dsheirer.identifier.IdentifierCollection;
|
||||
import io.github.dsheirer.identifier.Role;
|
||||
import io.github.dsheirer.identifier.configuration.ChannelNameConfigurationIdentifier;
|
||||
import io.github.dsheirer.identifier.configuration.DecoderTypeConfigurationIdentifier;
|
||||
import io.github.dsheirer.identifier.configuration.FrequencyConfigurationIdentifier;
|
||||
import io.github.dsheirer.identifier.configuration.SiteConfigurationIdentifier;
|
||||
import io.github.dsheirer.identifier.configuration.SystemConfigurationIdentifier;
|
||||
import io.github.dsheirer.identifier.decoder.DecoderLogicalChannelNameIdentifier;
|
||||
import io.github.dsheirer.identifier.patch.PatchGroup;
|
||||
import io.github.dsheirer.identifier.patch.PatchGroupIdentifier;
|
||||
import io.github.dsheirer.identifier.talkgroup.TalkgroupIdentifier;
|
||||
import io.github.dsheirer.properties.SystemProperties;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.ByteOrder;
|
||||
import java.nio.charset.Charset;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -267,140 +303,105 @@ public class WaveMetadata
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a WAVE recording metadata chunk from the audio metadata argument
|
||||
* @param identifierCollection to create the wave metadata from
|
||||
* @return wave metadata instance
|
||||
*/
|
||||
public static WaveMetadata createFrom(IdentifierCollection identifierCollection, AliasList aliasList)
|
||||
{
|
||||
WaveMetadata waveMetadata = new WaveMetadata();
|
||||
|
||||
return null;
|
||||
waveMetadata.add(WaveMetadataType.SOFTWARE, SystemProperties.getInstance().getApplicationName());
|
||||
waveMetadata.add(WaveMetadataType.DATE_CREATED, SDF.format(new Date(System.currentTimeMillis())));
|
||||
|
||||
Identifier system = identifierCollection.getIdentifier(IdentifierClass.CONFIGURATION, Form.SYSTEM, Role.ANY);
|
||||
if(system instanceof SystemConfigurationIdentifier)
|
||||
{
|
||||
waveMetadata.add(WaveMetadataType.ARTIST_NAME, ((SystemConfigurationIdentifier)system).getValue());
|
||||
}
|
||||
|
||||
Identifier site = identifierCollection.getIdentifier(IdentifierClass.CONFIGURATION, Form.SITE, Role.ANY);
|
||||
if(site instanceof SiteConfigurationIdentifier)
|
||||
{
|
||||
waveMetadata.add(WaveMetadataType.ALBUM_TITLE, ((SiteConfigurationIdentifier)site).getValue());
|
||||
}
|
||||
|
||||
Identifier channel = identifierCollection.getIdentifier(IdentifierClass.CONFIGURATION, Form.CHANNEL_NAME, Role.ANY);
|
||||
if(channel instanceof ChannelNameConfigurationIdentifier)
|
||||
{
|
||||
waveMetadata.add(WaveMetadataType.TRACK_TITLE, ((ChannelNameConfigurationIdentifier)channel).getValue());
|
||||
}
|
||||
|
||||
Identifier decoder = identifierCollection.getIdentifier(IdentifierClass.CONFIGURATION, Form.DECODER_TYPE,
|
||||
Role.ANY);
|
||||
if(decoder instanceof DecoderTypeConfigurationIdentifier)
|
||||
{
|
||||
waveMetadata.add(WaveMetadataType.COMMENTS, ((DecoderTypeConfigurationIdentifier)decoder).getValue().getDisplayString());
|
||||
}
|
||||
|
||||
Identifier channelName = identifierCollection.getIdentifier(IdentifierClass.DECODER, Form.CHANNEL_NAME, Role.ANY);
|
||||
|
||||
if(channelName instanceof DecoderLogicalChannelNameIdentifier)
|
||||
{
|
||||
waveMetadata.add(WaveMetadataType.CHANNEL_ID, ((DecoderLogicalChannelNameIdentifier)channelName).getValue());
|
||||
}
|
||||
|
||||
Identifier frequency = identifierCollection.getIdentifier(IdentifierClass.CONFIGURATION,
|
||||
Form.CHANNEL_FREQUENCY, Role.ANY);
|
||||
|
||||
if(frequency instanceof FrequencyConfigurationIdentifier)
|
||||
{
|
||||
waveMetadata.add(WaveMetadataType.CHANNEL_FREQUENCY,
|
||||
String.valueOf(((FrequencyConfigurationIdentifier)frequency).getValue()));
|
||||
}
|
||||
|
||||
for(Identifier identifier: identifierCollection.getIdentifiers(Form.TALKGROUP))
|
||||
{
|
||||
if(identifier instanceof TalkgroupIdentifier && identifier.getRole() == Role.FROM)
|
||||
{
|
||||
waveMetadata.add(WaveMetadataType.TALKGROUP_PRIMARY_FROM,
|
||||
String.valueOf(((TalkgroupIdentifier)identifier).getValue()));
|
||||
|
||||
Alias alias = aliasList.getAlias(identifier);
|
||||
|
||||
if(alias != null)
|
||||
{
|
||||
waveMetadata.add(WaveMetadataType.TALKGROUP_PRIMARY_FROM_ALIAS, alias.getName());
|
||||
waveMetadata.add(WaveMetadataType.TALKGROUP_PRIMARY_FROM_ICON, alias.getIconName());
|
||||
}
|
||||
}
|
||||
else if(identifier instanceof TalkgroupIdentifier && identifier.getRole() == Role.TO)
|
||||
{
|
||||
Alias alias = aliasList.getAlias(identifier);
|
||||
|
||||
if(alias != null)
|
||||
{
|
||||
waveMetadata.add(WaveMetadataType.TALKGROUP_PRIMARY_TO_ALIAS, alias.getName());
|
||||
waveMetadata.add(WaveMetadataType.TALKGROUP_PRIMARY_TO_ICON, alias.getIconName());
|
||||
}
|
||||
}
|
||||
else if(identifier instanceof PatchGroupIdentifier)
|
||||
{
|
||||
PatchGroup patchGroup = ((PatchGroupIdentifier)identifier).getValue();
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("P:").append(patchGroup.getPatchGroup()).append(patchGroup.getPatchedGroupIdentifiers());
|
||||
waveMetadata.add(WaveMetadataType.TALKGROUP_PRIMARY_TO, sb.toString());
|
||||
|
||||
Alias alias = aliasList.getAlias(identifier);
|
||||
|
||||
if(alias != null)
|
||||
{
|
||||
waveMetadata.add(WaveMetadataType.TALKGROUP_PRIMARY_TO_ALIAS, alias.getName());
|
||||
waveMetadata.add(WaveMetadataType.TALKGROUP_PRIMARY_TO_ICON, alias.getIconName());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return waveMetadata;
|
||||
}
|
||||
|
||||
// /**
|
||||
// * Creates a WAVE recording metadata chunk from the audio metadata argument
|
||||
// * @param audioMetadata to create the wave metadata from
|
||||
// * @return wave metadata instance
|
||||
// */
|
||||
// public static WaveMetadata createFrom(Metadata audioMetadata)
|
||||
// {
|
||||
// WaveMetadata waveMetadata = new WaveMetadata();
|
||||
//
|
||||
// waveMetadata.add(WaveMetadataType.SOFTWARE, SystemProperties.getInstance().getApplicationName());
|
||||
// waveMetadata.add(WaveMetadataType.DATE_CREATED, SDF.format(new Date(audioMetadata.getTimestamp())));
|
||||
// waveMetadata.add(WaveMetadataType.ARTIST_NAME, audioMetadata.getChannelConfigurationSystem());
|
||||
// waveMetadata.add(WaveMetadataType.ALBUM_TITLE, audioMetadata.getChannelConfigurationSite());
|
||||
// waveMetadata.add(WaveMetadataType.TRACK_TITLE, audioMetadata.getChannelConfigurationName());
|
||||
// waveMetadata.add(WaveMetadataType.COMMENTS, audioMetadata.getPrimaryDecoderType().getDisplayString());
|
||||
// waveMetadata.add(WaveMetadataType.CHANNEL_ID, audioMetadata.getChannelFrequencyLabel());
|
||||
// waveMetadata.add(WaveMetadataType.CHANNEL_FREQUENCY, String.valueOf(audioMetadata.getChannelFrequency()));
|
||||
//
|
||||
// AliasedIdentifier networkID1 = audioMetadata.getNetworkID1();
|
||||
//
|
||||
// if(networkID1 != null)
|
||||
// {
|
||||
// waveMetadata.add(WaveMetadataType.NETWORK_ID_1, networkID1.getIdentifier());
|
||||
// }
|
||||
//
|
||||
// AliasedIdentifier networkID2 = audioMetadata.getNetworkID2();
|
||||
//
|
||||
// if(networkID2 != null)
|
||||
// {
|
||||
// waveMetadata.add(WaveMetadataType.NETWORK_ID_2, networkID2.getIdentifier());
|
||||
// }
|
||||
//
|
||||
// AliasedIdentifier primaryFrom = audioMetadata.getPrimaryAddressFrom();
|
||||
//
|
||||
// if(primaryFrom != null)
|
||||
// {
|
||||
// waveMetadata.add(WaveMetadataType.TALKGROUP_PRIMARY_FROM, primaryFrom.getIdentifier());
|
||||
//
|
||||
// Alias alias = primaryFrom.getAlias();
|
||||
//
|
||||
// if(alias != null)
|
||||
// {
|
||||
// waveMetadata.add(WaveMetadataType.TALKGROUP_PRIMARY_FROM_ALIAS, alias.getName());
|
||||
// waveMetadata.add(WaveMetadataType.TALKGROUP_PRIMARY_FROM_ICON, alias.getIconName());
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// AliasedIdentifier primaryTo = audioMetadata.getPrimaryAddressTo();
|
||||
//
|
||||
// if(primaryTo != null)
|
||||
// {
|
||||
// waveMetadata.add(WaveMetadataType.TALKGROUP_PRIMARY_TO, primaryTo.getIdentifier());
|
||||
//
|
||||
// Alias alias = primaryTo.getAlias();
|
||||
//
|
||||
// if(alias != null)
|
||||
// {
|
||||
// waveMetadata.add(WaveMetadataType.TALKGROUP_PRIMARY_TO_ALIAS, alias.getName());
|
||||
// waveMetadata.add(WaveMetadataType.TALKGROUP_PRIMARY_TO_ICON, alias.getIconName());
|
||||
//
|
||||
// if(alias instanceof PatchGroupAlias)
|
||||
// {
|
||||
// PatchGroupAlias patchGroupAlias = (PatchGroupAlias)alias;
|
||||
//
|
||||
// List<Alias> patchedAliases = patchGroupAlias.getPatchedAliases();
|
||||
//
|
||||
// if(patchedAliases.size() >= 1)
|
||||
// {
|
||||
// Alias patch = patchedAliases.get(0);
|
||||
// waveMetadata.add(WaveMetadataType.TALKGROUP_PRIMARY_PATCHED_1, patch.getName());
|
||||
// }
|
||||
// if(patchedAliases.size() >= 2)
|
||||
// {
|
||||
// Alias patch = patchedAliases.get(1);
|
||||
// waveMetadata.add(WaveMetadataType.TALKGROUP_PRIMARY_PATCHED_2, patch.getName());
|
||||
// }
|
||||
// if(patchedAliases.size() >= 3)
|
||||
// {
|
||||
// Alias patch = patchedAliases.get(2);
|
||||
// waveMetadata.add(WaveMetadataType.TALKGROUP_PRIMARY_PATCHED_3, patch.getName());
|
||||
// }
|
||||
// if(patchedAliases.size() >= 4)
|
||||
// {
|
||||
// Alias patch = patchedAliases.get(3);
|
||||
// waveMetadata.add(WaveMetadataType.TALKGROUP_PRIMARY_PATCHED_4, patch.getName());
|
||||
// }
|
||||
// if(patchedAliases.size() >= 5)
|
||||
// {
|
||||
// Alias patch = patchedAliases.get(4);
|
||||
// waveMetadata.add(WaveMetadataType.TALKGROUP_PRIMARY_PATCHED_5, patch.getName());
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// AliasedIdentifier secondaryFrom = audioMetadata.getSecondaryAddressFrom();
|
||||
//
|
||||
// if(secondaryFrom != null)
|
||||
// {
|
||||
// waveMetadata.add(WaveMetadataType.TALKGROUP_SECONDARY_FROM, secondaryFrom.getIdentifier());
|
||||
//
|
||||
// Alias alias = secondaryFrom.getAlias();
|
||||
//
|
||||
// if(alias != null)
|
||||
// {
|
||||
// waveMetadata.add(WaveMetadataType.TALKGROUP_SECONDARY_FROM_ALIAS, alias.getName());
|
||||
// waveMetadata.add(WaveMetadataType.TALKGROUP_SECONDARY_FROM_ICON, alias.getIconName());
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// AliasedIdentifier secondaryTo = audioMetadata.getSecondaryAddressTo();
|
||||
//
|
||||
// if(secondaryTo != null)
|
||||
// {
|
||||
// waveMetadata.add(WaveMetadataType.TALKGROUP_SECONDARY_TO, secondaryTo.getIdentifier());
|
||||
//
|
||||
// Alias alias = secondaryTo.getAlias();
|
||||
//
|
||||
// if(alias != null)
|
||||
// {
|
||||
// waveMetadata.add(WaveMetadataType.TALKGROUP_SECONDARY_TO_ALIAS, alias.getName());
|
||||
// waveMetadata.add(WaveMetadataType.TALKGROUP_SECONDARY_TO_ICON, alias.getIconName());
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// return waveMetadata;
|
||||
// }
|
||||
|
||||
/**
|
||||
* Converts the integer length to an ID3 compatible length field where each byte only uses the 7 least significant
|
||||
* bits for a maximum of 28 bits used out of the 32-bit representation.
|
||||
|
||||
Reference in New Issue
Block a user