465 Wave Recording Audio Metadata (#473)

* Initial work on updating wave audio metadata to use identifier collection.

* Cleanup
This commit is contained in:
Denny Sheirer
2018-12-31 06:01:59 -05:00
committed by GitHub
parent 3fa7401a2b
commit 08ea5ab7cb
2 changed files with 137 additions and 136 deletions

View File

@@ -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);
}
}
}

View File

@@ -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.