Skip to content

Commit

Permalink
Worked on skipping through and loading up arbitary pieces of audio
Browse files Browse the repository at this point in the history
modified:   Gemfile
modified:   Gemfile.lock
	-- removed gems that were causing errors while debugging for rubymine

modified:   app/assets/javascripts/angular/controllers/listen.js
	-- added support for loading arbitary pieces of audio up (default chunk size is 30sec)

modified:   app/assets/javascripts/angular/services/angularjs-rails-resource.js
	-- removed handling of error... this was intercepting valid errors

modified:   app/assets/javascripts/angular/services/services.js
	-- minor fix

modified:   app/assets/javascripts/app.js
	-- added route for listen that supports time offsets

modified:   app/assets/templates/listen.html
	-- added mime attribute to source elements in audio tag so browser can be smart

modified:   app/controllers/media_controller.rb
	-- enabled returning mime types

modified:   db/development_seeds.rb
	-- fixed eroneous mime type

modified:   lib/RestFailureApp.rb
	-- fixed bug in condition. now json requests should always recieve json 401s (instead of sometimes seeing a rendered page)

modified:   lib/modules/audio_ffmpeg.rb
	-- attempted fix at duplicate file creation... fixed one case, suspicious of another still existing

modified:   lib/modules/audio_mp3splt.rb
	-- fixed several bugs that existed due to inputs not being converted properly. Also fixed offset calculation - not datetime voodo now

modified:   lib/modules/audio_sox.rb
	-- fixed several bugs that existed due to inputs not being converted properly

modified:   lib/modules/cache.rb
	-- improved naming conventions with proper parsing of parameters

modified:   lib/modules/uuid_helper.rb
	-- changed the default UUID generator used for the project to random (we really on a uniform distribution of guids to spread out files on disk)
  • Loading branch information
atruskie committed Jan 21, 2013
1 parent 66bd2ec commit 35d938b
Show file tree
Hide file tree
Showing 12 changed files with 68 additions and 23 deletions.
33 changes: 29 additions & 4 deletions app/assets/javascripts/angular/controllers/listen.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,39 @@
* @param Media
*/
function ListenCtrl($scope, $resource, $routeParams, Media, AudioEvent, Tag) {

var CHUNK_DURATION_SECONDS = 30.0;
function getMediaParameters() {
return {
start_offset: $routeParams.start,
end_offset: $routeParams.end,
// this one is different, it is encoded into the path of the request by angular
recordingId: $routeParams.recordingId

}
}

$scope.errorState = !GUID_REGEXP.test($routeParams.recordingId);

if ($scope.errorState) {
console.warn("Invalid guid specified in route... page rendering disabled");
}
else {

$routeParams.start = parseFloat($routeParams.start) || 0.0;
$routeParams.end = parseFloat($routeParams.end) || CHUNK_DURATION_SECONDS;
var chunkDuration = ($routeParams.end - $routeParams.start);
if (chunkDuration < 0) {

$routeParams.start = 0.0;
console.warn("invalid start offsets specified, reverting to safe value: start=" + $routeParams.start );
}
if (chunkDuration > CHUNK_DURATION_SECONDS) {
$routeParams.end = $routeParams.start + CHUNK_DURATION_SECONDS;
console.warn("invalid end offsets specified, reverting to safe value: end=" + $routeParams.end );
}



var recordingId = $scope.recordingId = $routeParams.recordingId;

$scope.model = {};
Expand All @@ -29,16 +54,16 @@ function ListenCtrl($scope, $resource, $routeParams, Media, AudioEvent, Tag) {

$scope.model.media.audioUrls = [];
angular.forEach($scope.model.media.options.audioFormats, function (value, key){
$scope.model.media.audioFormat = value;
this.push($scope.model.media.audioBaseUrl.format($scope.model.media) + "?" + authToken);
$scope.model.media.audioFormat = value.extension;
this.push({url: $scope.model.media.audioBaseUrl.format($scope.model.media) + "?" + authToken, mime: value.mimeType});
},$scope.model.media.audioUrls);

}
};
$scope.$on('event:auth-loginRequired', formatPaths);
$scope.$on('event:auth-loginConfirmed', formatPaths);

$scope.model.media = Media.get($routeParams, {},
$scope.model.media = Media.get(getMediaParameters(), {},
function mediaGetSuccess() {
// reformat url's
formatPaths();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@
return response;
},
function (response) {
console.log("rails field naming interceptor, promise failed function", response);
//console.log("rails field naming interceptor, promise failed function", response);

//return p.reject(response);
return response;
Expand Down
2 changes: 1 addition & 1 deletion app/assets/javascripts/angular/services/services.js
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@
loginSuccess(data, status, headers, config);
}
else {
console.info("Logged in via ping failed (probably something wrong with cookies).");
console.info("Logged in via ping failed (probably something wrong with cookies or not logged in).");
loginFailure(data, status, headers, config);
}

Expand Down
1 change: 1 addition & 0 deletions app/assets/javascripts/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ var bawApp = (function (undefined) {

when('/listen', {templateUrl: '/assets/listen.html', controller: ListenCtrl}).
when('/listen/:recordingId', {templateUrl: '/assets/listen.html', controller: ListenCtrl}).
when('/listen/:recordingId/start=:start/end=:end', {templateUrl: '/assets/listen.html', controller: ListenCtrl}).

when('/accounts', {templateUrl: '/assets/accounts_sign_in.html', controller: AccountsCtrl}).
when('/accounts/:action', {templateUrl: '/assets/accounts_sign_in.html', controller: AccountsCtrl}).
Expand Down
2 changes: 1 addition & 1 deletion app/assets/templates/listen.html
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ <h3>Spectrogram</h3>

<h3>Audio Controls</h3>
<audio id="main-player" controls>
<source ng-repeat="url in model.media.audioUrls" ng-src="{{url}}" src="">
<source ng-repeat="url in model.media.audioUrls" ng-src="{{url.url}}" src="" type="{{url.mime}}" >
Your browser does not support the audio element.
</audio>
<div id="listenEditContainer">
Expand Down
6 changes: 3 additions & 3 deletions app/controllers/media_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -110,13 +110,13 @@ def item

:info_url => "/media/#{@file_info[:id]}",
:audio_base_url => (url_format_underscore ? AUDIO_BASE_URL_US : AUDIO_BASE_URL_CC),
:spectrogram_base_url => (url_format_underscore ? SPECTROGRAM_BASE_URL_US : SPECTROGRAM_BASE_URL_CC) ,
:spectrogram_base_url => (url_format_underscore ? SPECTROGRAM_BASE_URL_US : SPECTROGRAM_BASE_URL_CC),

:options => {
:colors => Spectrogram.colour_options,
:window_size => Spectrogram.window_options,
:audio_formats => audio_media_types.collect { |mt| '.' + mt.symbol.to_s}.uniq,
:image_formats => image_media_types.collect { |mt| '.' + mt.symbol.to_s},
:audio_formats => audio_media_types.collect { |mt| { extension: '.' + mt.symbol.to_s, mime_type: mt.to_s } }.uniq,
:image_formats => image_media_types.collect { |mt| { extension: '.' + mt.symbol.to_s, mime_type: mt.to_s } },
}
}

Expand Down
2 changes: 1 addition & 1 deletion lib/RestFailureApp.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
class RestFailureApp < Devise::FailureApp
def respond
if !request.format.blank? && request.format.include?('json')
if !request.format.blank? && request.format.to_s.include?('json')
json_failure
else
super
Expand Down
5 changes: 3 additions & 2 deletions lib/modules/audio_ffmpeg.rb
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,8 @@ def self.modify_ffmpeg(source, target, modify_parameters = {})

if modify_parameters.include? :channel
# help... not sure how to do this
arguments += ''
# HACK: WARNING this will always mix down to mono
arguments += ' -ac 1 '
end

ffmpeg_command = "#@ffmpeg_path -i \"#{source}\" #{arguments} \"#{target}\""
Expand All @@ -150,7 +151,7 @@ def self.modify_ffmpeg(source, target, modify_parameters = {})
Logging::logger.error "Ffmpeg exited with an error: #{ffmpeg_stderr_str}"
end

if ext_to_copy_to
if ext_to_copy_to.length > 0
new_target = target.chomp(File.extname(target))+'.'+ext_to_copy_to
FileUtils.copy target, new_target
end
Expand Down
12 changes: 7 additions & 5 deletions lib/modules/audio_mp3splt.rb
Original file line number Diff line number Diff line change
Expand Up @@ -24,17 +24,19 @@ def self.modify_mp3splt(source, target, modify_parameters = {})
# WARNING: can't get more than an hour, since minutes only goes to 59.
# formatted time: mm.ss.ss
start_offset_num = 0.0
if modify_parameters.include?(:start_offset) && modify_parameters[:start_offset] > 0
start_offset = ' '+Time.at(modify_parameters[:start_offset]).utc.strftime('%M.%S.%2N')+' '
start_offset_num = modify_parameters[:start_offset]
if modify_parameters.include?(:start_offset) && modify_parameters[:start_offset].to_f > 0
start_offset = modify_parameters[:start_offset].to_f
start_offset = ' '+(start_offset / 60.0).floor.to_s + '.' + ('%05.2f' % (start_offset % 60)) + ' '
start_offset_num = modify_parameters[:start_offset].to_f
else
start_offset = ' 0.0 '
end

arguments += " #{start_offset} "

if modify_parameters.include?(:end_offset) && modify_parameters[:end_offset] > 0 && modify_parameters[:end_offset] > start_offset_num
end_offset_formatted = Time.at(modify_parameters[:end_offset]).utc.strftime('%M.%S.%2N')
if modify_parameters.include?(:end_offset) && modify_parameters[:end_offset].to_f > 0 && modify_parameters[:end_offset].to_f > start_offset_num
end_offset = modify_parameters[:end_offset].to_f
end_offset_formatted = (end_offset / 60.0).floor.to_s + '.' + ('%05.2f' % (end_offset % 60))
arguments += " #{end_offset_formatted} "
else
arguments += ' EOF '
Expand Down
3 changes: 2 additions & 1 deletion lib/modules/audio_sox.rb
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,8 @@ def self.modify_sox(source, target, modify_parameters = {})
=end
if modify_parameters.include? :channel
# help... not sure how to do this
arguments += ""
# HACK: WARNING this will always mix down to mono
arguments += ' remix - '
end

sox_command = "#@sox_path -V4 \"#{source}\" \"#{target}\" #{arguments}" # commands to get info from audio file
Expand Down
21 changes: 18 additions & 3 deletions lib/modules/cache.rb
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,8 @@ def self.build_subfolder(file_name)
file_name[0,2]
end

def self.build_parameters(parameter_names = {}, modify_parameters = {})
def self.build_parameters(parameter_names = [], modify_parameters = {})

file_name = ''

parameter_names.each do |param|
Expand All @@ -89,15 +90,19 @@ def self.build_parameters(parameter_names = {}, modify_parameters = {})
file_name += '.'+get_parameter(:format, modify_parameters, false).reverse.chomp('.').reverse
elsif param == :original_format
file_name += '.'+get_parameter(:original_format, modify_parameters, false).reverse.chomp('.').reverse
else
elsif [:start_offset, :end_offset].include? param
file_name += get_parameter(param, modify_parameters, true, :float)
elsif [:channel, :sample_rate, :window].include? param
file_name += get_parameter(param, modify_parameters, true, :int)
else
file_name += get_parameter(param, modify_parameters)
end
end

file_name
end

def self.get_parameter(parameter, modify_parameters, include_separator = true)
def self.get_parameter(parameter, modify_parameters, include_separator = true, format = :string)
# need to cater for the situation where modify_parameters contains strings (we want symbols)
modify_parameters.keys.each do |key|
modify_parameters[(key.to_sym rescue key) || key] = modify_parameters.delete(key)
Expand All @@ -111,6 +116,16 @@ def self.get_parameter(parameter, modify_parameters, include_separator = true)

if modify_parameters.include? parameter
result_name = modify_parameters[parameter].to_s

case format
when :int
result_name = result_name.to_i.to_s
when :float
result_name = result_name.to_f.to_s
else
# noop
end


#if parameter == :format
#result_name = result_name.trim '.', ''
Expand Down
2 changes: 1 addition & 1 deletion lib/modules/uuid_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ def self.included(base)
before_validation :set_uuid, :on => :create

def set_uuid
self.uuid = UUIDTools::UUID.timestamp_create.to_s
self.uuid ||= UUIDTools::UUID.random_create.to_s
end
end
end
Expand Down

0 comments on commit 35d938b

Please sign in to comment.