2016-07-13 Fred Gleason <fredg@paravelsystems.com>

* Implemented storage of RDXML data structures within a 'rdxl'
	user defined information frame in ID3 tags 'lib/rdwavefile.cpp' and
	'lib/rdaudio_convert.cpp'.
This commit is contained in:
Fred Gleason 2016-07-13 10:11:08 -04:00
parent b508b7a0ca
commit d8636ebb2c
6 changed files with 141 additions and 76 deletions

View File

@ -15287,3 +15287,8 @@
2016-07-12 Fred Gleason <fredg@paravelsystems.com>
* Added support for reading conductor field values (TPE3) from
ID3 tags in 'lib/rdwavefile.cpp'.
2016-07-13 Fred Gleason <fredg@paravelsystems.com>
* Implemented storage of RDXML data structures within a 'rdxl'
user defined information frame in ID3 tags 'lib/rdwavefile.cpp' and
'lib/rdaudio_convert.cpp'.

View File

@ -51,6 +51,7 @@
#include <rd.h>
#include <rdaudioconvert.h>
#include <rdlibrary_conf.h>
#include <rdcart.h>
#include <rdconf.h>
#define STAGE2_XFER_SIZE 2048
@ -1918,6 +1919,11 @@ void RDAudioConvert::ApplyId3Tag(const QString &filename,RDWaveData *wavedata)
frame->GetField(ID3FN_TEXT)->Set(wavedata->publisher());
tag->AddNewFrame(frame);
}
if(!wavedata->conductor().isEmpty()) {
frame=new ID3_Frame(ID3FID_CONDUCTOR);
frame->GetField(ID3FN_TEXT)->Set(wavedata->conductor());
tag->AddNewFrame(frame);
}
if(!wavedata->isrc().isEmpty()) {
frame=new ID3_Frame(ID3FID_ISRC);
frame->GetField(ID3FN_TEXT)->Set(wavedata->isrc());
@ -1929,6 +1935,16 @@ void RDAudioConvert::ApplyId3Tag(const QString &filename,RDWaveData *wavedata)
Set(QString().sprintf("%d",wavedata->releaseYear()));
tag->AddNewFrame(frame);
}
RDCart *cart=new RDCart(wavedata->cartNumber());
if(cart->exists()) {
QString xml=cart->xml(true,conv_settings,wavedata->cutNumber());
frame=new ID3_Frame(ID3FID_USERTEXT);
frame->GetField(ID3FN_DESCRIPTION)->Set("rdxl");
frame->GetField(ID3FN_TEXTENC)->Set(ID3TE_NONE);
frame->GetField(ID3FN_TEXT)->Set(xml);
tag->AddNewFrame(frame);
delete cart;
}
tag->Update();
delete tag;
}

View File

@ -861,11 +861,25 @@ void RDCart::getMetadata(RDWaveData *data) const
QString sql;
RDSqlQuery *q;
sql=QString("select TITLE,ARTIST,ALBUM,YEAR,LABEL,CLIENT,")+
"AGENCY,PUBLISHER,COMPOSER,USER_DEFINED,CONDUCTOR,SONG_ID,BPM,USAGE_CODE"+
sql=QString("select ")+
"TITLE,"+ // 00
"ARTIST,"+ // 01
"ALBUM,"+ // 02
"YEAR,"+ // 03
"LABEL,"+ // 04
"CLIENT,"+ // 05
"AGENCY,"+ // 06
"PUBLISHER,"+ // 07
"COMPOSER,"+ // 08
"USER_DEFINED,"+ // 09
"CONDUCTOR,"+ // 10
"SONG_ID,"+ // 11
"BPM,"+ // 12
"USAGE_CODE "+ // 13
QString().sprintf(" from CART where NUMBER=%u",cart_number);
q=new RDSqlQuery(sql);
if(q->first()) {
data->setCartNumber(cart_number);
data->setTitle(q->value(0).toString());
data->setArtist(q->value(1).toString());
data->setAlbum(q->value(2).toString());

View File

@ -927,38 +927,54 @@ void RDCut::getMetadata(RDWaveData *data) const
QString sql;
RDSqlQuery *q;
sql=QString().sprintf("select DESCRIPTION,OUTCUE,ISRC,ISCI,ORIGIN_DATETIME,\
START_DATETIME,END_DATETIME,START_DAYPART,END_DAYPART,\
SEGUE_START_POINT,\
SEGUE_END_POINT,TALK_START_POINT,TALK_END_POINT,\
START_POINT,END_POINT,HOOK_START_POINT,\
HOOK_END_POINT,FADEUP_POINT,FADEDOWN_POINT \
from CUTS where CUT_NAME=\"%s\"",
(const char *)cut_name);
sql=QString("select ")+
"CUT_NAME,"+ // 00
"DESCRIPTION,"+ // 01
"OUTCUE,"+ // 02
"ISRC,"+ // 03
"ISCI,"+ // 04
"ORIGIN_DATETIME,"+ // 05
"START_DATETIME,"+ // 06
"END_DATETIME,"+ // 07
"START_DAYPART,"+ // 08
"END_DAYPART,"+ // 09
"SEGUE_START_POINT,"+ // 10
"SEGUE_END_POINT,"+ // 11
"TALK_START_POINT,"+ // 12
"TALK_END_POINT,"+ // 13
"START_POINT,"+ // 14
"END_POINT,"+ // 15
"HOOK_START_POINT,"+ // 16
"HOOK_END_POINT,"+ // 17
"FADEUP_POINT,"+ // 18
"FADEDOWN_POINT "+ // 19
"from CUTS where CUT_NAME=\""+cut_name+"\"";
q=new RDSqlQuery(sql);
if(q->first()) {
data->setDescription(q->value(0).toString());
data->setOutCue(q->value(1).toString());
data->setIsrc(q->value(2).toString());
data->setIsci(q->value(3).toString());
data->setOriginationDate(q->value(4).toDate());
data->setOriginationTime(q->value(4).toTime());
data->setStartDate(q->value(5).toDate());
data->setStartTime(q->value(5).toTime());
data->setEndDate(q->value(6).toDate());
data->setEndTime(q->value(6).toTime());
data->setDaypartStartTime(q->value(7).toTime());
data->setDaypartEndTime(q->value(8).toTime());
data->setSegueStartPos(q->value(9).toInt());
data->setSegueEndPos(q->value(10).toInt());
data->setIntroStartPos(q->value(11).toInt());
data->setIntroEndPos(q->value(12).toInt());
data->setStartPos(q->value(13).toInt());
data->setEndPos(q->value(14).toInt());
data->setHookStartPos(q->value(15).toInt());
data->setHookEndPos(q->value(16).toInt());
data->setFadeUpPos(q->value(17).toInt());
data->setFadeDownPos(q->value(18).toInt());
data->setCutName(q->value(0).toString());
data->setCutNumber(RDCut::cutNumber(q->value(0).toString()));
data->setDescription(q->value(1).toString());
data->setOutCue(q->value(2).toString());
data->setIsrc(q->value(3).toString());
data->setIsci(q->value(4).toString());
data->setOriginationDate(q->value(5).toDate());
data->setOriginationTime(q->value(5).toTime());
data->setStartDate(q->value(6).toDate());
data->setStartTime(q->value(6).toTime());
data->setEndDate(q->value(7).toDate());
data->setEndTime(q->value(7).toTime());
data->setDaypartStartTime(q->value(8).toTime());
data->setDaypartEndTime(q->value(9).toTime());
data->setSegueStartPos(q->value(10).toInt());
data->setSegueEndPos(q->value(11).toInt());
data->setIntroStartPos(q->value(12).toInt());
data->setIntroEndPos(q->value(13).toInt());
data->setStartPos(q->value(14).toInt());
data->setEndPos(q->value(15).toInt());
data->setHookStartPos(q->value(16).toInt());
data->setHookEndPos(q->value(17).toInt());
data->setFadeUpPos(q->value(18).toInt());
data->setFadeDownPos(q->value(19).toInt());
data->setMetadataFound(true);
}
delete q;

View File

@ -3348,51 +3348,62 @@ void RDWaveFile::ReadId3Metadata()
}
ID3_Frame *frame=NULL;
ID3_Tag id3_tag(QCString().sprintf("%s",(const char *)wave_file.name().utf8()));
if((frame=id3_tag.Find(ID3FID_TITLE))!=NULL) {
wave_data->setTitle(ID3_GetString(frame,ID3FN_TEXT));
wave_data->setMetadataFound(true);
if((frame=id3_tag.Find(ID3FID_USERTEXT,ID3FN_DESCRIPTION,"rdxl"))!=NULL) {
rdxl_contents=ID3_GetString(frame,ID3FN_TEXT);
if(wave_data!=NULL) {
std::vector<RDWaveData> wavedatas;
if(RDCart::readXml(&wavedatas,rdxl_contents)>1) {
*wave_data=wavedatas[1];
}
}
}
if((frame=id3_tag.Find(ID3FID_BPM))!=NULL) {
wave_data->
setBeatsPerMinute(QString(ID3_GetString(frame,ID3FN_TEXT)).toInt());
wave_data->setMetadataFound(true);
}
if((frame=id3_tag.Find(ID3FID_ALBUM))!=NULL) {
wave_data->setAlbum(ID3_GetString(frame,ID3FN_TEXT));
wave_data->setMetadataFound(true);
}
if((frame=id3_tag.Find(ID3FID_COMPOSER))!=NULL) {
wave_data->setComposer(ID3_GetString(frame,ID3FN_TEXT));
wave_data->setMetadataFound(true);
}
if((frame=id3_tag.Find(ID3FID_COPYRIGHT))!=NULL) {
wave_data->setCopyrightNotice(ID3_GetString(frame,ID3FN_TEXT));
wave_data->setMetadataFound(true);
}
if((frame=id3_tag.Find(ID3FID_ORIGARTIST))!=NULL) {
wave_data->setArtist(ID3_GetString(frame,ID3FN_TEXT));
wave_data->setMetadataFound(true);
}
if((frame=id3_tag.Find(ID3FID_LEADARTIST))!=NULL) {
wave_data->setArtist(ID3_GetString(frame,ID3FN_TEXT));
wave_data->setMetadataFound(true);
}
if((frame=id3_tag.Find(ID3FID_CONDUCTOR))!=NULL) {
wave_data->setConductor(ID3_GetString(frame,ID3FN_TEXT));
wave_data->setMetadataFound(true);
}
if((frame=id3_tag.Find(ID3FID_PUBLISHER))!=NULL) {
wave_data->setPublisher(ID3_GetString(frame,ID3FN_TEXT));
wave_data->setMetadataFound(true);
}
if((frame=id3_tag.Find(ID3FID_ISRC))!=NULL) {
wave_data->setIsrc(ID3_GetString(frame,ID3FN_TEXT));
wave_data->setMetadataFound(true);
}
if((frame=id3_tag.Find(ID3FID_YEAR))!=NULL) {
wave_data->
setReleaseYear(QString(ID3_GetString(frame,ID3FN_TEXT)).toInt());
wave_data->setMetadataFound(true);
else {
if((frame=id3_tag.Find(ID3FID_TITLE))!=NULL) {
wave_data->setTitle(ID3_GetString(frame,ID3FN_TEXT));
wave_data->setMetadataFound(true);
}
if((frame=id3_tag.Find(ID3FID_BPM))!=NULL) {
wave_data->
setBeatsPerMinute(QString(ID3_GetString(frame,ID3FN_TEXT)).toInt());
wave_data->setMetadataFound(true);
}
if((frame=id3_tag.Find(ID3FID_ALBUM))!=NULL) {
wave_data->setAlbum(ID3_GetString(frame,ID3FN_TEXT));
wave_data->setMetadataFound(true);
}
if((frame=id3_tag.Find(ID3FID_COMPOSER))!=NULL) {
wave_data->setComposer(ID3_GetString(frame,ID3FN_TEXT));
wave_data->setMetadataFound(true);
}
if((frame=id3_tag.Find(ID3FID_COPYRIGHT))!=NULL) {
wave_data->setCopyrightNotice(ID3_GetString(frame,ID3FN_TEXT));
wave_data->setMetadataFound(true);
}
if((frame=id3_tag.Find(ID3FID_ORIGARTIST))!=NULL) {
wave_data->setArtist(ID3_GetString(frame,ID3FN_TEXT));
wave_data->setMetadataFound(true);
}
if((frame=id3_tag.Find(ID3FID_LEADARTIST))!=NULL) {
wave_data->setArtist(ID3_GetString(frame,ID3FN_TEXT));
wave_data->setMetadataFound(true);
}
if((frame=id3_tag.Find(ID3FID_CONDUCTOR))!=NULL) {
wave_data->setConductor(ID3_GetString(frame,ID3FN_TEXT));
wave_data->setMetadataFound(true);
}
if((frame=id3_tag.Find(ID3FID_PUBLISHER))!=NULL) {
wave_data->setPublisher(ID3_GetString(frame,ID3FN_TEXT));
wave_data->setMetadataFound(true);
}
if((frame=id3_tag.Find(ID3FID_ISRC))!=NULL) {
wave_data->setIsrc(ID3_GetString(frame,ID3FN_TEXT));
wave_data->setMetadataFound(true);
}
if((frame=id3_tag.Find(ID3FID_YEAR))!=NULL) {
wave_data->
setReleaseYear(QString(ID3_GetString(frame,ID3FN_TEXT)).toInt());
wave_data->setMetadataFound(true);
}
}
}

View File

@ -132,6 +132,9 @@ void Xport::Import()
if(use_metadata>0) {
cart->setMetadata(conv->sourceWaveData());
cut->setMetadata(conv->sourceWaveData());
syslog(LOG_NOTICE,"SOURCE: title: %s startDateTime: %s %s",
(const char *)conv->sourceWaveData()->title(),
(const char *)conv->sourceWaveData()->startDate().toString("yyyy-MM-dd"),(const char *)conv->sourceWaveData()->startTime().toString("hh:mm:ss"));
}
if(autotrim_level!=0) {
cut->autoTrim(RDCut::AudioBoth,100*autotrim_level);