Merge branch 'devel' of dev.sourcefabric.org:airtime into devel
This commit is contained in:
commit
5c3701c064
.gitignore
airtime_mvc
application
public/js/airtime/playlist
python_apps/media-monitor/airtimefilemonitor
|
@ -1,4 +1,2 @@
|
||||||
.*
|
.*
|
||||||
*.pyc
|
*.pyc
|
||||||
/files
|
|
||||||
build/build.properties
|
|
||||||
|
|
|
@ -29,13 +29,12 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
|
||||||
"mood" => "Mood",
|
"mood" => "Mood",
|
||||||
"name" => "Name",
|
"name" => "Name",
|
||||||
"orchestra" => "Orchestra",
|
"orchestra" => "Orchestra",
|
||||||
"radio_station_name" => "Radio Station Name",
|
|
||||||
"rating" => "Rating",
|
"rating" => "Rating",
|
||||||
"sample_rate" => "Sample Rate",
|
"sample_rate" => "Sample Rate",
|
||||||
"track_title" => "Title",
|
"track_title" => "Title",
|
||||||
"track_number" => "Track Number",
|
"track_number" => "Track Number",
|
||||||
"utime" => "Uploaded",
|
"utime" => "Uploaded",
|
||||||
"year" => "Year"
|
"year" => "Year"
|
||||||
);
|
);
|
||||||
|
|
||||||
$criteriaTypes = array(
|
$criteriaTypes = array(
|
||||||
|
@ -60,7 +59,6 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
|
||||||
"mood" => "s",
|
"mood" => "s",
|
||||||
"name" => "s",
|
"name" => "s",
|
||||||
"orchestra" => "s",
|
"orchestra" => "s",
|
||||||
"radio_station_name" => "s",
|
|
||||||
"rating" => "n",
|
"rating" => "n",
|
||||||
"sample_rate" => "n",
|
"sample_rate" => "n",
|
||||||
"track_title" => "s",
|
"track_title" => "s",
|
||||||
|
@ -210,7 +208,7 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
|
||||||
/* This is where the additional modifier rows get defined
|
/* This is where the additional modifier rows get defined
|
||||||
* The additional row count starts at 0 and gets appended
|
* The additional row count starts at 0 and gets appended
|
||||||
* to the parent field name
|
* to the parent field name
|
||||||
*/
|
*/
|
||||||
} else if (count($storedCrit["crit"][$criteriaKeys[$i]]) > 1) {
|
} else if (count($storedCrit["crit"][$criteriaKeys[$i]]) > 1) {
|
||||||
$n = $j - 1;
|
$n = $j - 1;
|
||||||
$criteria = new Zend_Form_Element_Select("sp_criteria_field_".$i."_".$n);
|
$criteria = new Zend_Form_Element_Select("sp_criteria_field_".$i."_".$n);
|
||||||
|
@ -251,7 +249,7 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
|
||||||
$this->addElement($criteriaExtra);
|
$this->addElement($criteriaExtra);
|
||||||
}
|
}
|
||||||
|
|
||||||
}//for
|
}//for
|
||||||
|
|
||||||
}//for
|
}//for
|
||||||
|
|
||||||
|
|
|
@ -76,7 +76,6 @@ class Application_Model_Block
|
||||||
"mood" => "DbMood",
|
"mood" => "DbMood",
|
||||||
"name" => "DbName",
|
"name" => "DbName",
|
||||||
"orchestra" => "DbOrchestra",
|
"orchestra" => "DbOrchestra",
|
||||||
"radio_station_name" => "DbRadioStationName",
|
|
||||||
"rating" => "DbRating",
|
"rating" => "DbRating",
|
||||||
"sample_rate" => "DbSampleRate",
|
"sample_rate" => "DbSampleRate",
|
||||||
"track_title" => "DbTrackTitle",
|
"track_title" => "DbTrackTitle",
|
||||||
|
@ -1211,6 +1210,7 @@ EOT;
|
||||||
|
|
||||||
$insertList = array();
|
$insertList = array();
|
||||||
$totalTime = 0;
|
$totalTime = 0;
|
||||||
|
$totalItems = 0;
|
||||||
|
|
||||||
// this moves the pointer to the first element in the collection
|
// this moves the pointer to the first element in the collection
|
||||||
$files->getFirst();
|
$files->getFirst();
|
||||||
|
@ -1220,7 +1220,9 @@ EOT;
|
||||||
$length = Application_Common_DateHelper::calculateLengthInSeconds($iterator->current()->getDbLength());
|
$length = Application_Common_DateHelper::calculateLengthInSeconds($iterator->current()->getDbLength());
|
||||||
$insertList[$id] = $length;
|
$insertList[$id] = $length;
|
||||||
$totalTime += $length;
|
$totalTime += $length;
|
||||||
if ( !is_null($limit['items']) && $limit['items'] == count($insertList)) {
|
$totalItems++;
|
||||||
|
|
||||||
|
if ((!is_null($limit['items']) && $limit['items'] == count($insertList)) || $totalItems > 500) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1252,7 +1254,6 @@ EOT;
|
||||||
"mood" => "Mood",
|
"mood" => "Mood",
|
||||||
"name" => "Name",
|
"name" => "Name",
|
||||||
"orchestra" => "Orchestra",
|
"orchestra" => "Orchestra",
|
||||||
"radio_station_name" => "Radio Station Name",
|
|
||||||
"rating" => "Rating",
|
"rating" => "Rating",
|
||||||
"sample_rate" => "Sample Rate",
|
"sample_rate" => "Sample Rate",
|
||||||
"track_title" => "Title",
|
"track_title" => "Title",
|
||||||
|
|
|
@ -10,7 +10,7 @@ if ($item['type'] == 2) {
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
<li class="ui-state-default" id="spl_<?php echo $item["id"] ?>" unqid="<?php echo $item["id"]; ?>">
|
<li class="ui-state-default" id="spl_<?php echo $item["id"] ?>" unqid="<?php echo $item["id"]; ?>">
|
||||||
<div class="list-item-container">
|
<div class="list-item-container">
|
||||||
|
|
||||||
<?php if ($item['type'] == 0 && $item['exists']):?>
|
<?php if ($item['type'] == 0 && $item['exists']):?>
|
||||||
<div class="big_play" audioFile="<?php echo $item["id"]; ?>">
|
<div class="big_play" audioFile="<?php echo $item["id"]; ?>">
|
||||||
|
@ -39,11 +39,11 @@ if ($item['type'] == 2) {
|
||||||
<span class="spl_title"><?php echo $item['track_title'] ?></span>
|
<span class="spl_title"><?php echo $item['track_title'] ?></span>
|
||||||
</div>
|
</div>
|
||||||
<div class="text-row">
|
<div class="text-row">
|
||||||
<span class="spl_artist"><?php echo $item['creator'] ?></span>
|
<span class="spl_artist"><?php echo $item['creator'] ?></span>
|
||||||
<span class="spl_offset"><?php echo $item["offset"]?></span>
|
<span class="spl_offset"><?php echo $item["offset"]?></span>
|
||||||
</div>
|
</div>
|
||||||
<?php //create the crossfade icon.
|
<?php //create the crossfade icon.
|
||||||
if ($i < count($items) -1):
|
if (($i < count($items) -1) && !($items[$i]['type'] == 2 && $items[$i+1]['type'])):
|
||||||
?>
|
?>
|
||||||
<div id="fade_<?php echo $i ?>" class="spl_fade_control ui-state-default"></div>
|
<div id="fade_<?php echo $i ?>" class="spl_fade_control ui-state-default"></div>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
@ -62,7 +62,7 @@ if ($item['type'] == 2) {
|
||||||
|
|
||||||
<?php //create a fade editor box
|
<?php //create a fade editor box
|
||||||
//(fadeout of current position + fade in of next position)
|
//(fadeout of current position + fade in of next position)
|
||||||
if($i < count($items) -1):
|
if(($i < count($items) -1) && !($items[$i]['type'] == 2 && $items[$i+1]['type'])):
|
||||||
?>
|
?>
|
||||||
<div id="crossfade_<?php echo $i ?>-<?php echo $i+1 ?>" class="crossfade clearfix" style="display: none">
|
<div id="crossfade_<?php echo $i ?>-<?php echo $i+1 ?>" class="crossfade clearfix" style="display: none">
|
||||||
<?php echo $this->partial('playlist/set-fade.phtml', array(
|
<?php echo $this->partial('playlist/set-fade.phtml', array(
|
||||||
|
|
|
@ -590,7 +590,6 @@ var criteriaTypes = {
|
||||||
"mood" : "s",
|
"mood" : "s",
|
||||||
"name" : "s",
|
"name" : "s",
|
||||||
"orchestra" : "s",
|
"orchestra" : "s",
|
||||||
"radio_station_name" : "s",
|
|
||||||
"rating" : "n",
|
"rating" : "n",
|
||||||
"sample_rate" : "n",
|
"sample_rate" : "n",
|
||||||
"track_title" : "s",
|
"track_title" : "s",
|
||||||
|
|
|
@ -4,11 +4,16 @@ import os
|
||||||
import sys
|
import sys
|
||||||
import shutil
|
import shutil
|
||||||
import tempfile
|
import tempfile
|
||||||
|
import logging
|
||||||
|
|
||||||
|
|
||||||
|
logger = logging.getLogger()
|
||||||
|
|
||||||
def get_process_output(command):
|
def get_process_output(command):
|
||||||
"""
|
"""
|
||||||
Run subprocess and return stdout
|
Run subprocess and return stdout
|
||||||
"""
|
"""
|
||||||
|
logger.debug(command)
|
||||||
p = Popen(command, shell=True, stdout=PIPE)
|
p = Popen(command, shell=True, stdout=PIPE)
|
||||||
return p.communicate()[0].strip()
|
return p.communicate()[0].strip()
|
||||||
|
|
||||||
|
@ -22,7 +27,7 @@ def run_process(command):
|
||||||
def get_mime_type(file_path):
|
def get_mime_type(file_path):
|
||||||
"""
|
"""
|
||||||
Attempts to get the mime type but will return prematurely if the process
|
Attempts to get the mime type but will return prematurely if the process
|
||||||
takes longer than 5 seconds. Note that this function should only be called
|
takes longer than 5 seconds. Note that this function should only be called
|
||||||
for files which do not have a mp3/ogg/flac extension.
|
for files which do not have a mp3/ogg/flac extension.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
@ -48,27 +53,27 @@ def calculate_replay_gain(file_path):
|
||||||
"""
|
"""
|
||||||
This function accepts files of type mp3/ogg/flac and returns a calculated ReplayGain value in dB.
|
This function accepts files of type mp3/ogg/flac and returns a calculated ReplayGain value in dB.
|
||||||
If the value cannot be calculated for some reason, then we default to 0 (Unity Gain).
|
If the value cannot be calculated for some reason, then we default to 0 (Unity Gain).
|
||||||
|
|
||||||
http://wiki.hydrogenaudio.org/index.php?title=ReplayGain_1.0_specification
|
http://wiki.hydrogenaudio.org/index.php?title=ReplayGain_1.0_specification
|
||||||
"""
|
"""
|
||||||
|
|
||||||
try:
|
try:
|
||||||
"""
|
"""
|
||||||
Making a duplicate is required because the ReplayGain extraction utilities we use
|
Making a duplicate is required because the ReplayGain extraction utilities we use
|
||||||
make unwanted modifications to the file.
|
make unwanted modifications to the file.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
search = None
|
search = None
|
||||||
temp_file_path = duplicate_file(file_path)
|
temp_file_path = duplicate_file(file_path)
|
||||||
|
|
||||||
if re.search(r'mp3$', temp_file_path, re.IGNORECASE) or get_mime_type(temp_file_path) == "audio/mpeg":
|
if re.search(r'mp3$', file_path, re.IGNORECASE) or get_mime_type(temp_file_path) == "audio/mpeg":
|
||||||
if run_process("which mp3gain > /dev/null") == 0:
|
if run_process("which mp3gain > /dev/null") == 0:
|
||||||
out = get_process_output('mp3gain -q "%s" 2> /dev/null' % temp_file_path)
|
out = get_process_output('mp3gain -q "%s" 2> /dev/null' % temp_file_path)
|
||||||
search = re.search(r'Recommended "Track" dB change: (.*)', out)
|
search = re.search(r'Recommended "Track" dB change: (.*)', out)
|
||||||
else:
|
else:
|
||||||
print "mp3gain not found"
|
print "mp3gain not found"
|
||||||
#Log warning
|
#Log warning
|
||||||
elif re.search(r'ogg$', temp_file_path, re.IGNORECASE) or get_mime_type(temp_file_path) == "application/ogg":
|
elif re.search(r'og(g|a)$', file_path, re.IGNORECASE) or get_mime_type(temp_file_path) == "application/ogg":
|
||||||
if run_process("which vorbisgain > /dev/null && which ogginfo > /dev/null") == 0:
|
if run_process("which vorbisgain > /dev/null && which ogginfo > /dev/null") == 0:
|
||||||
run_process('vorbisgain -q -f "%s" 2>/dev/null >/dev/null' % temp_file_path)
|
run_process('vorbisgain -q -f "%s" 2>/dev/null >/dev/null' % temp_file_path)
|
||||||
out = get_process_output('ogginfo "%s"' % temp_file_path)
|
out = get_process_output('ogginfo "%s"' % temp_file_path)
|
||||||
|
@ -76,7 +81,7 @@ def calculate_replay_gain(file_path):
|
||||||
else:
|
else:
|
||||||
print "vorbisgain/ogginfo not found"
|
print "vorbisgain/ogginfo not found"
|
||||||
#Log warning
|
#Log warning
|
||||||
elif re.search(r'flac$', temp_file_path, re.IGNORECASE) or get_mime_type(temp_file_path) == "audio/x-flac":
|
elif re.search(r'flac$', file_path, re.IGNORECASE) or get_mime_type(temp_file_path) == "audio/x-flac":
|
||||||
if run_process("which metaflac > /dev/null") == 0:
|
if run_process("which metaflac > /dev/null") == 0:
|
||||||
out = get_process_output('metaflac --show-tag=REPLAYGAIN_TRACK_GAIN "%s"' % temp_file_path)
|
out = get_process_output('metaflac --show-tag=REPLAYGAIN_TRACK_GAIN "%s"' % temp_file_path)
|
||||||
search = re.search(r'REPLAYGAIN_TRACK_GAIN=(.*) dB', out)
|
search = re.search(r'REPLAYGAIN_TRACK_GAIN=(.*) dB', out)
|
||||||
|
|
Loading…
Reference in New Issue