⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 birdsfn.m

📁 非常好的数字处理教程
💻 M
字号:
%function birdsfn(action)    if nargin < 1        action='init';    end	name = mfilename;    figname = [name(1:end-2) '_fig'];    f=findobj('Tag',figname);    handles = get(f,'UserData');    switch action        case 'help'			display_help(figname);        case 'init'			setwindow(f);            movegui(f,'center');			birds = {'Yellow_Warbler', 'Western_Meadowlark', 'Orchard_Oriole',...			'Chipping_Sparrow', 'Scissor_Tailed_Flycatcher',...			'Black_Throated_Gray_Warbler', 'Cassins_Kingbird',...			'Black_Necked_Stilt', 'Chestnut_Sided_Warbler',...			'Great_Horned_Owl', 'Grasshopper_Sparrow', 'Swamp_Sparrow',...			'Golden_Crowned_Sparrow', 'Indigo_Bunting', 'Robin',...			'Nashville_Warbler', 'Rufous_Sided_Towhee', 'Random_Bird'};			set(handles.birdlist,'String',birds);		case 'plot'			if ~isfield(handles,'pscore')				[handles.audiodata,handles.pscore] = synthbird(handles);			end			plotdata(handles.pscore);		case 'play'			[handles.audiodata,handles.pscore] = synthbird(handles);			play_audiodata(handles.audiodata);		case 'save'			if isfield(handles, 'audiodata')                save_audiodata(handles.audiodata);            end		case {'sonogram','fourier'}			handles.audiodata = synthbird(handles);			switch action				case 'sonogram'					sonoexpogui(handles.audiodata);				case 'fourier'					fourierexpo(handles.audiodata);			end		case 'close'			close_figure(f,figname(1:end-4));            return;	end	set(f,'UserData',handles);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%	function setwindow(f)	load 'forest.mat';	set(f,'Units','Pixels',...		'Position',[100 100 size(x,2)*1.1 size(x,1)*1.1]);	setdefaults;	axes('pos',[0 0 1 1]);	image(x);	axis image;	colormap(cmap);	switch computer		case {'GLNX86','MAC'}			birdfontsize = 12;			titlesize = 24;			authorsize = 14;		case 'PCWIN'			birdfontsize = 10;			titlesize = 18;			authorsize = 12;	end	y = -35;	text(52.5,y+60,'Additive Synthesis Forest',...		'fontsize',titlesize,...		'fontweight','bold',...		'color',[0.5 0.9 0.8]);function [audiodata,pscore] = synthbird(handles)	contents = get(handles.birdlist,'String');	bird = contents{get(handles.birdlist,'Value')};	if strncmp(bird,'Random',6)		birdname=['RandBird_' num2str(rand*5280) '_' char(floor(rand*26+65))];		fprintf('%s\n', birdname);		pscore = randbird(floor(rand*40));	else		pscore = birdcall(bird);	end	timestretch = str2num(get(handles.timestretch,'String'));	randtime = str2num(get(handles.randtime,'String'));	randamp = str2num(get(handles.randamp,'String'));	randfreq = str2num(get(handles.randfreq,'String'));	% Format is: {begin dur freq freq_skew amp freq_env amp_env <partials>}	for i=1:size(pscore,1)		pscore{i,1} = pscore{i,1}*(timestretch+(rand-0.5)*randtime);		pscore{i,2} = pscore{i,2}*(timestretch+(rand-0.5)*randtime);		pscore{i,3} = pscore{i,3}*(1+(rand-0.5)*randfreq);		pscore{i,4} = pscore{i,4}*(1+(rand-0.5)*randfreq);		pscore{i,5} = pscore{i,5}*(1+(rand-0.5)*randamp);		freqenv = pscore{i,6};		freqenv(1:2:end) = freqenv(1:2:end).*(timestretch+(rand-0.5)*randtime);		freqenv(2:2:end) = freqenv(2:2:end).*(1+(rand-0.5)*randfreq);		freqenv = freqenv./max(freqenv(1:2:end));		pscore{i,6} = freqenv;		ampenv = pscore{i,7};		ampenv(1:2:end) = ampenv(1:2:end).*(timestretch+(rand-0.5)*randtime);        ampenv(2:2:end) = ampenv(2:2:end).*(1+(rand-0.5)*randamp);		ampenv = ampenv./max(ampenv(1:2:end));		pscore{i,7} = ampenv./max(ampenv(1:2:end));	end	Fs = 44100;	audiodata.data = normalize(synth(pscore, Fs,'add')');	audiodata.Fs = Fs;function plotdata(pscore)	% Format is: {begin dur freq freq_skew amp freq_env amp_env <partials>}	% Make plot for each note?	figure;	for i=1:size(pscore,1)		ampenv = pscore{i,7};		amptimes = pscore{i,1} + pscore{i,2}*ampenv(1:2:end);		ampvals = pscore{i,5}*ampenv(2:2:end);		freqenv = pscore{i,6};		freqtimes = pscore{i,1} + pscore{i,2}*freqenv(1:2:end);		freqvals = pscore{i,3} + pscore{i,4}*freqenv(2:2:end);		subplot(size(pscore,1),2,i*2-1)		plot(amptimes,ampvals);		axis tight;		if i == 1,			title('Amplitude Envelopes');		end		if i == size(pscore,1)			xlabel('Time (s)');		end		ylabel(['Note ' num2str(i)]);		subplot(size(pscore,1),2,i*2)		plot(freqtimes,freqvals);		axis tight;		if i == 1,            title('Frequency Envelopes');        end		if i == size(pscore,1)			xlabel('Time (s)');		end	end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -