mirror of
https://github.com/ElvishArtisan/rivendell.git
synced 2025-08-02 08:59:33 +02:00
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:
parent
b508b7a0ca
commit
d8636ebb2c
@ -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'.
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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());
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user