Errors with audiorecord function
이 질문을 팔로우합니다.
- 팔로우하는 게시물 피드에서 업데이트를 확인할 수 있습니다.
- 정보 수신 기본 설정에 따라 이메일을 받을 수 있습니다.
오류 발생
페이지가 변경되었기 때문에 동작을 완료할 수 없습니다. 업데이트된 상태를 보려면 페이지를 다시 불러오십시오.
이전 댓글 표시
0 개 추천
Hello everyone, I've written the below code so far.

Need Matlab to record(function to be running/active) for as long the button is pressed.
Then use the above running time as an input for the record function (screenshot).
Imagine it being like a play/pause button.
Gives me some errors
Can I use while (as long the state button value is True) instead of if(skips some code parts)?
Thanks in advance
댓글 수: 1
Nikos Korobos
2022년 3월 18일
Is it possible to replace the if with a while?
채택된 답변
Walter Roberson
2022년 3월 18일
1 개 추천
Yes, it is possible. However, you cannot achieve your goals by doing that.
You are in the middle of a callback that fires every time the state of the button changes -- which can mean that it was pressed to start or can mean that it was pressed to end.
You should have your app store the current status, currently recording or not. You should have your app store the recorder object (at the app level).
When the button is pushed, have the value changed function check to see if it is a request to start recording or to stop recording.
- If it is a request to start recording and you are already recording, either discard the press or else stop the existing recording and continue on as if you were not already recording.
- If it is a request to start recording and you are not already recording (or you "fell through" after stopping an existing recording), create the recorder object and store it at the app level, and set your state to "recording", activate the record() method of the recorder, and return from the callback.
- If it is a request to stop recording and you are not already recording, discard the press
- If it is a request to stop recording and you are currently recording, stop the recording, grab the data, remove the recorder object, set your state to not-recording, and enable any actions that should not be possible to perform until you have recorded data, and return
When you activate the record() method, I recommend that you put in a maximum length, to prevent it from overflowing the memory.
댓글 수: 13
Nikos Korobos
2022년 3월 19일
Thanks for your input so far, its a state button the one im currently using here.
Nikos Korobos
2022년 3월 19일
Also what do you mean by:
You should have your app store the current status, currently recording or not. You should have your app store the recorder object (at the app level).
app.currently_recording = true;
app.recorder = audiorecorder(fs, bits, ch);
Nikos Korobos
2022년 3월 20일
Got one more question.
Should app.currently_recording have the value of app.RecordButton.Value or not?
If you could explain a bit more what you sent above it would be great.
Seems like the recording starts by itself with the code above.
Thanks in advance
Nikos Korobos
2022년 3월 20일
I would like the recording to start when the value of the button is equal to 1 or True
Walter Roberson
2022년 3월 20일
Assume that somehow the program might have lost track of events or receive them out of order. You might receive two callbacks to Start in a row, or two callbacks to Stop in a row. It is not good programming practice to assume that the events generated by the user interface perfectly match the program state.
It is better for the program to keep track of whether it believes that it is currently recording or not. When it receives a Start event it should check its own memory of what it is doing in case it got a Start while it is already started. Likewise if it got a Stop event it should check its memory of what it thinks it is doing in case it is already stopped.
Your current code tests if the value is "True". However uibutton style state has value 0 or 1. Instead of
if value == "True"
code
if value
Nikos Korobos
2022년 3월 20일
I get what you 're saying, but isn't this condition supposed to get values such as 1 or 0?
In MATLAB the test
if Value
is equivalent to
if all(logical(Value(:)) == true) == true
To phrase that a different way:
- the Value must be convertible to numeric
- the converted value must not be NaN
- all converted values must be non-zero
So even a single zero leads to the test being considered to fail, and NaN leads to error, and otherwise the condition is considered to succeed
So you do not need to explicitly
if value == 1
What you care about is that it is non-zero and just naming the variable without a relation operator automatically tests for non-zero
Nikos Korobos
2022년 3월 21일
편집: Nikos Korobos
2022년 3월 21일
I think i got a grip on what you are saying.
Would you point out any mistakes in my code (according to your directions)?
Sorry for spamming but I'm a total beginner on Matlab.
Thanks in advance

Do not do the
app.currently_recording = true;
at that point. At the place you initialize your other variables you should initialize it to false and leave it like that until you are switching into recording mode.
In the case for
if value & app.currently_recording == false
you have
app.currently_recording == true;
but that should be
app.currently_recording = true;
Then in the "if it is a request to stop" case, you currently have
if value & app.currently_recording = true
and you should change that to
if ~value & app.currently_recording = true
and change the
app.currently_recording == false;
to
app.currently_recording = false;
Remember that == is comparison, and = is assignment.
Nikos Korobos
2022년 3월 22일
Hello again, so I've done some testing with your suggestions and my code is currently like this.

Although it does run and the Record button wont give me any errors, it doesn't seem to record anything.
Any ideas?
Thanks in advance
Nikos Korobos
2022년 3월 22일
I have also added a Properties section

추가 답변 (0개)
카테고리
도움말 센터 및 File Exchange에서 Whos에 대해 자세히 알아보기
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!웹사이트 선택
번역된 콘텐츠를 보고 지역별 이벤트와 혜택을 살펴보려면 웹사이트를 선택하십시오. 현재 계신 지역에 따라 다음 웹사이트를 권장합니다:
또한 다음 목록에서 웹사이트를 선택하실 수도 있습니다.
사이트 성능 최적화 방법
최고의 사이트 성능을 위해 중국 사이트(중국어 또는 영어)를 선택하십시오. 현재 계신 지역에서는 다른 국가의 MathWorks 사이트 방문이 최적화되지 않았습니다.
미주
- América Latina (Español)
- Canada (English)
- United States (English)
유럽
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)
