function varargout = audio(varargin) % AUDIO MATLAB code for audio.fig % AUDIO, by itself, creates a new AUDIO or raises the existing % singleton*. % % H = AUDIO returns the handle to a new AUDIO or the handle to % the existing singleton*. % % AUDIO('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in AUDIO.M with the given input arguments. % % AUDIO('Property','Value',...) creates a new AUDIO or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before audio_OpeningFcn gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to audio_OpeningFcn via varargin. % % *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one % instance to run (singleton)". % % See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help audio

% Last Modified by GUIDE v2.5 11-Oct-2023 21:14:03

% Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @audio_OpeningFcn, .... 'gui_OutputFcn', @audio_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end

if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT end

% --- Executes just before audio is made visible. function audio_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to audio (see VARARGIN)

% Choose default command line output for audio handles.output = hObject; % Update handles structure guidata(hObject, handles); % timer_obj = timer('ExecutionMode', 'fixedRate', 'Period', 0.1, ... % 'TimerFcn', @update_plot); % % % 启动定时器 % start(timer_obj); % UIWAIT makes audio wait for user response (see UIRESUME) % uiwait(handles.figure1); end

% --- Outputs from this function are returned to the command line. function varargout = audio_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure varargout{1} = handles.output;

end % --- Executes on button press in button_savedata. % function button_savedata_Callback(hObject, eventdata, handles) % % hObject handle to button_savedata (see GCBO) % % eventdata reserved - to be defined in a future version of MATLAB % % handles structure with handles and user data (see GUIDATA) % global audio_data; % global save_flag; % if(hObject.Value) % save_flag=1; % elseif(hObject.Value==0&&save_flag==1) % save_flag=0; % y=audio_data; % save("recorddata.mat","y"); % % app.sounddata=y; % filenames = dir('recorddata.mat'); % n = numel(filenames); % fs = 44100; % nBits = 16; % for a=1:n % name = filenames(a).name; % name_no = name; % name_no(end-3:end) = []; % d = load(name); % field = fieldnames(d); % audio = getfield(d,char(field)); % audiowrite([name_no,'.wav'],audio,fs,'BitsPerSample',nBits,'Comment',name_no) % a=a+1; % end % end %% % end function button_savedata_Callback(hObject, eventdata, handles) global audio_data; global save_flag; global message_cnt; if hObject.Value save_flag = 1; elseif hObject.Value == 0 && save_flag save_flag = 0; y = audio_data; save("recorddata.mat", "y"); filenames = dir('recorddata.mat'); n = numel(filenames); fs = 44100; nBits = 16; for a = 1:n name = filenames(a).name; name_no = name; name_no(end-3:end) = []; audio = y; audiowrite([name_no, '.wav'], audio, fs, 'BitsPerSample', nBits, 'Comment', name_no) end % str1 = '输入文件名'; % str2 = handles.edittext_FileName.String; % flag = strcmp(str1,str2); % if(flag == 0) % 代表输入了文件名 % fileName = ['./mydata/20/' str2 '.xlsx']; % xlswrite(fileName,audio_data); % set(handles.edittext_FileName,'String',str1); % % % 保存数据成功信息打印 % mystring = 'INFO: 文件已保存!'; % MessageString = handles.listbox_MessagePrint.String; % MessageSize = size(MessageString); % if(MessageSize(1,1) <= 0) % set(handles.listbox_MessagePrint,'Value',1); % set(handles.listbox_MessagePrint,'String',mystring); % elseif(MessageSize(1,1) < message_cnt) % set(handles.listbox_MessagePrint,'Value',MessageSize(1,1)+1); % set(handles.listbox_MessagePrint,'String',[MessageString;{mystring}]); % else % set(handles.listbox_MessagePrint,'Value',message_cnt); % set(handles.listbox_MessagePrint,'String',[MessageString(2:message_cnt,1);{mystring}]); % end % else % % 保存数据失败信息打印 % mystring = 'INFO: 文件未保存-->请输入文件名!'; % MessageString = handles.listbox_MessagePrint.String; % MessageSize = size(MessageString); % if(MessageSize(1,1) <= 0) % set(handles.listbox_MessagePrint,'Value',1); % set(handles.listbox_MessagePrint,'String',mystring); % elseif(MessageSize(1,1) < message_cnt) % set(handles.listbox_MessagePrint,'Value',MessageSize(1,1)+1); % set(handles.listbox_MessagePrint,'String',[MessageString;{mystring}]); % else % set(handles.listbox_MessagePrint,'Value',message_cnt); % set(handles.listbox_MessagePrint,'String',[MessageString(2:message_cnt,1);{mystring}]); % end % end end end

function button_savedata_CreateFcn(hObject, eventdata, handles) global audio_data; audio_data = 0; global save_flag; save_flag = 0; end

function button_tcp_CreateFcn(hObject, eventdata, handles) global tcp_server_obj tcp_server_obj = 0; global receivedData receivedData = []; global message_cnt message_cnt = 0; global fakedata fakedata=0; global realdata realdata=0; global realdataflag realdataflag=0; global tcp_callback_cnt tcp_callback_cnt =0; % global WordLib; end
% --- Executes on button press in button_tcp. function button_tcp_Callback(hObject, eventdata, handles) global tcp_server_obj; global message_cnt; RemoteHostIP = handles.edittext_RemoteHostIP.String; RemoteHostPort = str2num(handles.edittext_RemoteHostPort.String); if(hObject.Value) % 打开连接 % tcp_server_obj=tcpsever(RemoteHostIP,RemoteHostPort); % set(tcp_server_obj, 'InputBufferSize', 4); tcp_server_obj =tcpserver('127.0.0.1', RemoteHostPort);%我电脑的IP127.0.0.1 % tcp_server_obj.BytesAvailableFcnMode = 'byte'; % tcp_server_obj.BytesAvailableFcnCount = 4; % tcp_server_obj.BytesAvailableFcn = {@TcpServer_callback,handles}; % configureCallback(tcp_server_obj,"byte",2,@TcpServer_callback);%configureCallback(tcp_server_obj,"byte",4,@TcpServer_callback) ; % PrintMessage(handles,message_cnt,"INFO:等待网络连接"); disp('INFO:等待网络连接'); fopen(tcp_server_obj); % PrintMessage(handles,message_cnt,"INFO:连接成功!!!"); disp('INFO:连接成功'); fwrite(tcp_server_obj,[16 1]); configureCallback(tcp_server_obj,"byte",2,@TcpServer_callback); fwrite(tcp_server_obj,[15 255]); else % 关闭连接 delete(tcp_server_obj); end end

function axes_AudioData_CreateFcn(hObject, eventdata, handles)

end

function TcpServer_callback(obj,event,handles) global audio_data; global save_flag; global receivedData; global tcp_callback_cnt; global fakedata; global realdata; global realdataflag; % global message_cnt; % global MIX_Model; % global MIC_Model; % global WordLib; % hAxes = handles.axes_AudioData;

   data = fread(obj,1,'uint16'); 
    % data = char(received_data);
        %handles = guidata(obj);

% 更新变量
handles.myVariable =  data;
assignin('base', 'myVariable', handles.myVariable);

    if(data==0x1001&&tcp_callback_cnt==0)
        tcp_callback_cnt=tcp_callback_cnt+1;
        fakedata=0;
    elseif(tcp_callback_cnt==1)
        fakedata=data;
        tcp_callback_cnt=tcp_callback_cnt+1;
    elseif(tcp_callback_cnt==2&&data==0xffff)
        realdata=fakedata;
        
        tcp_callback_cnt=0;
        realdataflag=1;
        realdata = realdata/(2^16-1)*4.096-2.048; % %%%%%%%%%%%%还没改
        fwrite(obj,[15 255]);
    else 
        fwrite(obj,[15 255]);
        realdataflag=0;
    end
    handles.tcp_callback_cnt=tcp_callback_cnt;
    handles.realdataflag=realdataflag;
    assignin('base', 'tcp_callback_cnt', handles.tcp_callback_cnt);
    assignin('base', 'realdataflag', handles.realdataflag);
    handles.realdata=realdata;
    assignin('base', 'realdata', handles.realdata);
    handles.fakedata=fakedata;
    assignin('base', 'fakedata', handles.fakedata);
    % notify(handles, 'VariableChanged');
    flag=realdataflag;
    % 更新句柄结构
   
    if any(save_flag>0.5)
        if any(flag>0.5)
        audio_data=[audio_data;realdata];
        end
    end
    if any(flag>0.5)
      disp('画图');  
     handles.axes_AudioData =obj;
     hAxes = handles.axes_AudioData;
     realdataflag=0;
     receivedData = [receivedData; realdata];
     plot(hAxes, receivedData);
     
     xlim(hAxes, [max(1, size(receivedData, 1) - 8000), size(receivedData, 1)]);
    end
    handles.receivedData=receivedData;
    assignin('base', 'receivedData', handles.receivedData);

end

% function myCallback2(~, eventdata) % global realdataflag; % if(realdataflag==1) % disp('画图');
% hAxes = handles.axes_AudioData; % receivedData = [receivedData; realdata]; % plot(hAxes, receivedData); % realdataflag=0; % xlim(hAxes, [max(1, size(receivedData, 1) - 8000), size(receivedData, 1)]); % end % end % hObject handle to button_tcp (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of button_tcp

function figure1_CloseRequestFcn(hObject, eventdata, handles) global tcp_server_obj; % Hint: delete(hObject) closes the figure delete(hObject); if(isempty(tcp_server_obj) == 1 ) fclose(tcp_server_obj); % 防止在接收过程中关闭GUI,造成tcp server对象未关闭 delete(tcp_server_obj); end

clear tcp_server_obj;
delete(instrfindall);

end

function edittext_LocalHostIP_Callback(hObject, eventdata, handles) end function edittext_LocalHostIP_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end set(hObject,'String','192.168.43.37'); end

function edittext_LocalHostPort_Callback(hObject, eventdata, handles) end function edittext_LocalHostPort_CreateFcn(hObject, eventdata, handles)

    if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
        set(hObject,'BackgroundColor','white');
    end
    set(hObject,'String','1234');

end

function edittext_RemoteHostIP_Callback(hObject, eventdata, handles) end function edittext_RemoteHostIP_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end set(hObject,'String','192.168.43.37'); end

function edittext_RemoteHostPort_Callback(hObject, eventdata, handles) end function edittext_RemoteHostPort_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end set(hObject,'String','8888'); end

% --- Executes during object creation, after setting all properties.

% --- Executes on button press in pushbutton_PlayAudio. function pushbutton_PlayAudio_Callback(hObject, eventdata, handles) % hObject handle to pushbutton_PlayAudio (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) load recorddata.mat y; %y=app.sounddata; Fs=44100; % assignin('base','y',y); % assignin('base','Fs',Fs); whos y Fs; player = audioplayer(y,Fs); play(player); end

% --- Executes during object creation, after setting all properties. function figure1_CreateFcn(hObject, eventdata, handles) end function text1_CreateFcn(hObject, eventdata, handles) end

% --- Executes during object creation, after setting all properties.

% hObject handle to axes_AudioData (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called

% Hint: place code in OpeningFcn to populate axes_AudioData 警告: 执行为类 matlabshared.asyncio.internal.InputStream 定义的事件 DataWritten 的侦听程序回调时出现错误: 错误使用 plot 数据必须为可转换为双精度值的数值、日期时间、持续时间、分类或数组。 怎么改内容:根据错误消息 "错误使用 plot 数据必须为可转换为双精度值的数值、日期时间、持续时间、分类或数组",我注意到你尝试使用 plot 函数绘制图形时出现了问题。

要解决这个问题,你可以按照以下步骤进行修改:

  1. 确保 receivedData 是一个双精度数组或者可以转换为双精度值的数据类型。你可以使用 class 函数来检查数据的类型。例如,输入 class(receivedData) 来查看 receivedData 的类型。如果类型不是 double 类型,请确保将其转换为 double 类型的数组。

  2. 检查 receivedData 中是否存在 NaN(非数字)或 Inf(无穷大)等特殊值。这些特殊值可能导致 plot 函数无法正确绘制图形。你可以使用 isnan 和 isinf 函数来检查数据中是否存在这些特殊值,并进行相应的处理。

  3. 确保 receivedData 是一个正确的数组大小和形状。receivedData 应该是一个列向量或者矩阵,其中每一列或每一行代表一个数据系列。如果 receivedData 不是一个列向量或者矩阵,请确保将其转换为相应的形状。

例如,如果你的 receivedData 是一个列向量,那么你可以使用以下代码来绘制图形:

plot(handles.axes_AudioData, receivedData);

其中,handles.axes_AudioData 是你的坐标轴句柄。

请根据你的实际情况修改代码,确保传递给 plot 函数的数据是符合要求的,并处理可能导致问题的特殊值。如果问题仍然存在,请提供更多相关的代码和上下文信息,以便更好地理解问题并提供帮助。


原文地址: http://www.cveoy.top/t/topic/oA6 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录