• Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Register
  • Login
UBports Robot Logo UBports Forum
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Register
  • Login

[How-To] Record Calls

Scheduled Pinned Locked Moved Support
73 Posts 12 Posters 17.5k Views 12 Watching
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • B Offline
      Br1
      last edited by Br1 2 Dec 2024, 17:44 15 Sept 2022, 14:48

      Before using these scripts read the DISCLAIMER here.

      To perform this how-to you must be familiar with the command line, as I mentioned in other post ( @klh excuse the off-topic ) I created a service to record all calls.

      The first step is run :

      arecord file.wav
      

      make a call and then stop recording with Ctrl+C

      play recorded call, if voices are not clearly heard unfortunately this how-to is already over 😞

      otherwise you can proceed ...

      • You have to create callrecorder service, to create it mount root in read/write mode :
      sudo mount -o remount,rw /
      

      sudo nano /etc/init.d/callrecorder :

      #! /bin/sh
      
      ### BEGIN INIT INFO
      # Provides:          callrecorder
      # Required-Start:    $local_fs
      # Required-Stop:     &local_fs
      # Default-Start:     2 3 4 5
      # Default-Stop:      0 1 6
      # Short-Description: Call Recorder
      # Description:       Call Recorder Daemon
      ### END INIT INFO
      
      # Written by Br1 <br1@spacelinux.it>
      
      case "$1" in
        start)
          echo "Call recorder starting ..."
          bash -c 'cd /home/phablet/.callrec/ && ./prepare-sh &'
         ;;
        stop)
          pkill manager.sh ; pkill ini.sh ; pkill ter.sh ; pkill ris.sh ;
          rm /home/phablet/.callrec/CallRecorder/.*swp 2> /dev/null ;
          rm /home/phablet/aRam/Rec_Call/.*swp 2> /dev/null ;
      
          echo "Call recorder stopped !"
          ;;
      
        *)
          echo "Usage: sudo service callrecorder {start|stop}"
          exit 1
          ;;
      esac
      
      exit 0
      

      and set permission with : sudo chmod 755 /etc/init.d/callrecorder

      enable autostart with : sudo update-rc.d callrecorder defaults
      ( if you want disable it : sudo update-rc.d -f callrecorder remove)

      • you have to create 3 directories :
        /home/phablet/aRam
        /home/phablet/.callrec
        /home/phablet/MyRec

      • and you also have to create 5 scripts :

      1 - nano /home phablet/.callrec/prepare-sh :

      #!/bin/sh
      
      # ----- start/stop service section -----
      #
      # check service status
      if ps aux | grep -q "[m]anager.sh" ; then echo "    ! Service already running !" ; exit
      
      fi
      
      # check if ramdisk is mounted and exec scripts
      if grep -qs '/phablet/aRam ' /proc/mounts ; then cd /home/phablet/aRam/Rec_Call ; ./manager.sh & ./ini.sh & ./ter.sh & ./ris.sh & exit 
      
      fi
      
      # ----- boot section ----- 
      #
      /bin/sleep 10 ;
      
      # clear cache and buffer
      sh -c "free && sync && echo 3 > /proc/sys/vm/drop_caches && free" ;
      
      # create ramdisk
      mount -t tmpfs -o size=200M tmpfs /home/phablet/aRam ;
      
      # create directory
      mkdir -p /home/phablet/aRam/Rec_Call ;
      
      # copy scripts to directory just created
      cp -rp /home/phablet/.callrec/*.sh /home/phablet/aRam/Rec_Call ;
      
      # and exec them
      cd /home/phablet/aRam/Rec_Call ; ./manager.sh & ./ini.sh & ./ter.sh & ./ris.sh &
      
      exit
      

      2 - nano /home/phablet/.callrec/manager.sh :

      #!/bin/sh
      
      while true
      
      do
      
      FL1=/home/phablet/aRam/Rec_Call/fl1 ;
      FL2=/home/phablet/aRam/Rec_Call/fl2 ;
      FL3=/home/phablet/aRam/Rec_Call/fl3 ;
      RecDir=/home/phablet/MyRec ;
      HomDir=/home/phablet/aRam/Rec_Call ;
      
      # if fl1 exist ini.sh intercepted outgoing or incoming call
      if [ -f "$FL1" ]; then
      	# deletes temporary file and starts recording as phablet user (with .new extension)
      	rm -f $FL1 ; su phablet -s /usr/bin/arecord /home/phablet/MyRec/"$(date +%d_%m_%y__%H_%M_%S)".wav.new &
      fi
      
      # if fl2 exist call has ended 
      if [ -f "$FL2" ]; then
      	# deletes the temporary file and stop recording
      	rm -f $FL2 ; pkill -f arecord ; sleep 0.2 ;
      	# if fl3 exist call was answered
      	if [ -f "$FL3" ]; then
      		# delete .new extension and exec three scripts
      		rm -f $FL3 ; mv $RecDir/*.new $RecDir/"$(date +%d_%m_%y__%H_%M_%S)".wav ;  $HomDir/ini.sh & $HomDir/ter.sh & $HomDir/ris.sh &
      		else
      		# call was not answered
      		# delete recording and exec two scripts
      		rm $RecDir/*.new ; $HomDir/ini.sh & $HomDir/ter.sh &
      	fi
      
      fi
      
      sleep 1 ;
      
      done ;
      

      3 - nano /home/phablet/.callrec/ini.sh :

      #!/bin/sh
      
      cd /home/phablet/aRam/Rec_Call ;
      
      inicmline="dbus-monitor --system interface=org.ofono.VoiceCallManager member=CallAdded" ;
      
      $inicmline | while read line
      do
          echo $line | grep "incoming\|dialing"
              if [ "$?" -eq "0" ]; then
              echo "";/bin/touch fl1;echo "";
              break
          fi
      done
      

      4 - nano /home/phablet/.callrec/ter.sh :

      #!/bin/sh
      
      cd /home/phablet/aRam/Rec_Call ;
      
      tercmline="dbus-monitor --system interface=org.ofono.VoiceCall member=PropertyChanged" ;
      
      $tercmline | while read line
      do
          echo $line | grep "disconnected"
              if [ "$?" -eq "0" ]; then
              echo "";/bin/touch fl2;echo "";
              break
          fi
      done
      

      5 - nano /home/phablet/.callrec/ris.sh :

      #!/bin/sh
      
      cd /home/phablet/aRam/Rec_Call ;
      
      riscmline="dbus-monitor --system interface=org.ofono.VoiceCall member=PropertyChanged" ;
      
      $riscmline | while read line
      do
          echo $line | grep "StartTime"
              if [ "$?" -eq "0" ]; then
              echo "";/bin/touch fl3;echo "";
              break
          fi
      done
      

      make all scripts executable with chmod u+x

      • you can start the service with : sudo service callrecorder start
        or reboot device

      -------- overview --- how it works --------

      • callrecorder service run prepare-sh script and allows you to stop the execution by terminating 4 running processes
      • prepare-sh creates ramdisk in order to speed up read/write operations, copies 4 scripts on ramdisk and executes them, some more details in scripts comments (any text after a hash sign '#')

      I was planning to make a single script always running and it didn't work, so I created a four scripts system :

      • manager.sh handles three child/processes scripts, each of them intercepts a string (dbus-monitor) creates temporary file and exit

      • ini.sh intercepts outgoing and incoming calls

      • ris.sh intercepts the start of phone communication (call was answered)

      • ter.sh intercepts the end of phone communication

      the last two would suffice, however, starting the recording at the beginning of phone communication, sometimes 1/2 seconds are lost ... so I preferred to start the recording on outgoing/incoming calls (if there is no answer recording is deleted)

      Calls are recorded in uncompressed format (wav) but if you periodically delete the recordings there will be no problems ... I prefer to convert them (to ogg format) daily with crontab managed script, if you want I attach it, but it will be necessary install ffmpeg (via apt), I will complete it to delete recordings older than 40 days.

      I hope I did not forget anything ... English is not my natural language, if something is not clear, you ask and I will try to explain better.

      I have not detected abnormal battery drain, maybe these scripts can be improved, anyway callrecorder service works fine on my Xiaomi Mi A2.

      I want to say Thanks to all volunteers working on UBports project, having linux on a smartphone is very rewarding πŸ™‚

      ^

      • Google Pixel 3a XL
      • Xiaomi MI A2
      D 1 Reply Last reply 16 Sept 2022, 08:26 Reply Quote 9
      • B Br1 marked this topic as a regular topic on 15 Sept 2022, 14:48
      • D Offline
        domubpkm @Br1
        last edited by 16 Sept 2022, 08:26

        @br1 Thank you for your effort. Isn't that a good basis for doing a .click? As it stands, this will only be of interest to qualified users. Personally, the recorder allows me to record smartphone conversations quite easily.

        B 2 Replies Last reply 16 Sept 2022, 15:16 Reply Quote 1
        • B Offline
          Br1 @domubpkm
          last edited by 16 Sept 2022, 15:16

          @domubpkm said in [How-To] Record Calls:

          Isn't that a good basis for doing a .click?

          I don’t know and I’d like to know ...
          I would also love to create a GUI for shell scripting but I don’t think it’s possible.

          ^

          • Google Pixel 3a XL
          • Xiaomi MI A2
          KenedaK 1 Reply Last reply 17 Sept 2022, 04:26 Reply Quote 0
          • KenedaK Online
            Keneda @Br1
            last edited by 17 Sept 2022, 04:26

            @br1
            https://open-store.io/app/touchide.daniel ?

            2015-2023 : Meizu MX4 ☠️⚰️✝️
            2023-2024 : Nexus 5 ☠️⚰️✝️
            2024-***** : FPOS Fairphone 5 waiting UT for freedom πŸ˜‰
            πŸ‡²πŸ‡«πŸ‡¬πŸ‡§

            1 Reply Last reply Reply Quote 0
            • B Offline
              Br1 @domubpkm
              last edited by Br1 20 Sept 2022, 21:58

              --------- update ---------

              @domubpkm said in [How-To] Record Calls:

              As it stands, this will only be of interest to qualified users

              I've made it as easy as possible, only three steps :

              • first, use morph browser to download( just click) callrecorder.tar.gz from here (in addition to above scripts contains callrec-install script)

              • second, open file manager, go to Downloads click callrecorder.tar.gz and select extract archive

              • third, to run callrec-install open terminal and type :

              sudo Downloads/callrecorder/callrec-install
              

              callrec-install script will ask you to choose :

              type 1 to install callrecorder (reboot required)
              type 2 to uninstall it
              type 3 to exit from script

              you don't have to do anything else.

              Recorded calls are in MyRec directory, at device startup prepare.sh script will delete any that are older than 30 days.

              I recommend running callrec-install to uninstall callrecorder before proceeding to ota update.

              This is callrec-install script :

              #!/bin/bash
              
              CRSERV=/etc/init.d/callrecorder ;
              
              # Make sure only root can run this script
              if [ "$(id -u)" != "0" ]; then
                 echo "    Must be run as root, you must prepend sudo !" 1>&2
                 exit 1
              fi
              
              echo -e '\n - You can install / uninstall CallRecorder -\n' ;
              
              PS3='Please enter your choice : '
              options=("Install" "Uninstall" "Quit")
              select opt in "${options[@]}"
              do
              	case $opt in
              	"Install")
              
               			echo -e '\n Installation in progress ...\n' ;
              
              			# creates 3 directories
              			su phablet -s /bin/mkdir /home/phablet/{.callrec,aRam,MyRec} ;
              			
              			cp /home/phablet/Downloads/callrecorder/* /home/phablet/.callrec/ ;
              
              			# change the working directory
              			cd /home/phablet/.callrec ;
              
              			# mount root in read/write mode
              			mount -o remount,rw / ;
              
              			# copy callrecorder service and enable autostart
              			cp callrecorder /etc/init.d/ ; update-rc.d callrecorder defaults ;
              
              			# roll back root in read only mode
              			mount -o remount,ro / ;
              
              			echo -e ' Installed, reboot your device !\n' ;
              			
              			exit 0
              
              		;;
              
              	"Uninstall")
              
              			# check status
              			if [ ! -f "$CRSERV" ]; then
              
              			echo -e '\n CallRecorder is not installed !\n' ; break
              
              			else
              
              			# mount root in read/write mode
              			mount -o remount,rw / ;
              
              			# stop callrecorder, disable autostart and remove service file
              			service callrecorder stop ; update-rc.d -f callrecorder remove ; rm /etc/init.d/callrecorder ;
              
              			# roll back root in read only mode
              			mount -o remount,ro / ;
              
              			# delete scripts and remove directories
              			rm -rf /home/phablet/.callrec/* ; rmdir /home/phablet/.callrec ;
              			rm -rf /home/phablet/MyRec/* ; rmdir /home/phablet/MyRec ;
              			rm -rf /home/phablet/aRam/* ;
              
              			echo -e '\n Done, CallRecorder uninstalled !\n'
              
              			exit 0
              
              			fi
              
              		;;
              
                      "Quit")
              			break
              		;;
              			*) echo "invalid option $REPLY"
              		;;
                  esac
              done
              

              ^

              • Google Pixel 3a XL
              • Xiaomi MI A2
              D BollyB 3 Replies Last reply 20 Sept 2022, 22:18 Reply Quote 3
              • D Offline
                domubpkm @Br1
                last edited by 20 Sept 2022, 22:18

                @br1 Anything that makes it user friendly is welcome, so thank you. To clarify, your recorder automatically records all conversations, correct? In what sound format?

                B 1 Reply Last reply 20 Sept 2022, 22:35 Reply Quote 0
                • B Offline
                  Br1 @domubpkm
                  last edited by 20 Sept 2022, 22:35

                  @domubpkm said in [How-To] Record Calls:

                  To clarify, your recorder automatically records all conversations, correct? In what sound format?

                  Yes, that is correct, in wav format.

                  ^

                  • Google Pixel 3a XL
                  • Xiaomi MI A2
                  1 Reply Last reply Reply Quote -1
                  • D Offline
                    domubpkm @Br1
                    last edited by 21 Sept 2022, 07:13

                    @br1 said in [How-To] Record Calls:

                    script will delete any that are older than 30 days.

                    Perhaps the option should be provided:

                    • automatically erase recordings after ... days (between 0 and 30 days) ? 0 = never
                    B 1 Reply Last reply 21 Sept 2022, 16:06 Reply Quote 0
                    • B Offline
                      Br1 @domubpkm
                      last edited by 21 Sept 2022, 16:06

                      @domubpkm said in [How-To] Record Calls:

                      Perhaps the option should be provided:

                      I'll work on it ...

                      automatically erase recordings after ... days (between 0 and 30 days) ? 0 = never

                      You can use uText app " Edit and save every file on your Phone" ... open filemanager and go to .callrec directory then click prepare.sh , open with uText app and find this line :

                      find /home/phablet/MyRec/* -mtime +30 -exec rm {} \; 2> /dev/null ;
                      

                      replace "30" with days you want

                      or if you want to disable automatically erase you have to prepend the line with hash sign '#'

                      # find /home/phablet/MyRec/* -mtime +30 -exec rm {} \; 2> /dev/null ;ΓΉ
                      

                      and save file, anyway wav is an uncompressed format, a rough estimate, 1-hour call about 30 megabytes ...

                      ^

                      • Google Pixel 3a XL
                      • Xiaomi MI A2
                      D 1 Reply Last reply 21 Sept 2022, 17:53 Reply Quote 1
                      • D Offline
                        domubpkm @Br1
                        last edited by 21 Sept 2022, 17:53

                        @br1 Thanks again. I used the archive manager in ubuntu 20.04 to edit the line.

                        One more clarification: what do you mean by 'at de device startup' in the line 'at device startup prepare.sh script will delete any that are older than 30 days'. Does this mean every time we restart or reboot the smartphone ? So, for example, if there is no reboot for 3 months, all the records for the 3 months will be on the smartphone ?
                        And if we restart the smartphone after 25 days, how does the script understand this? The 30 day period is not reset?

                        B 1 Reply Last reply 21 Sept 2022, 23:57 Reply Quote 0
                        • B Offline
                          Br1 @domubpkm
                          last edited by 21 Sept 2022, 23:57

                          @domubpkm said in [How-To] Record Calls:

                          Does this mean every time we restart or reboot the smartphone ? So, for example, if there is no reboot for 3 months, all the records for the 3 months will be on the smartphone ?

                          Yes 😞 the Linux-style solution is very simple ... a small script :

                          #!/bin/sh
                          find /home/phablet/MyRec/* -mtime +30 -exec rm {} \; 2> /dev/null 
                          

                          to be run daily via crontab ... but crontab requires (again) to mount root in read write mode, the easiest solution to avoid it is add the line to manager.sh, check would be carried out after each recording.

                          I'll be away for a week, but then I'll work on it.

                          ^

                          • Google Pixel 3a XL
                          • Xiaomi MI A2
                          D 1 Reply Last reply 22 Sept 2022, 06:36 Reply Quote 0
                          • D Offline
                            domubpkm @Br1
                            last edited by 22 Sept 2022, 06:36

                            @br1 These are just improvements. I test on my ultra custom rc channel 😁 and it works fine. πŸ‘
                            The wav format doesn't take up that much space because it's the lowest quality i think here.

                            1 Reply Last reply Reply Quote 0
                            • B Offline
                              Bocephus
                              last edited by 23 Sept 2022, 06:36

                              Sailfish has call recording built into the phone app with the push of a button. Just sayin'...

                              D 1 Reply Last reply 23 Sept 2022, 08:16 Reply Quote -1
                              • D Offline
                                domubpkm @Bocephus
                                last edited by 23 Sept 2022, 08:16

                                @bocephus Sailfish is not UT. If you have the knowledge, you can implement the mechanism you say. This will be greatly appreciated by the community. Personally, I thank all those who bring a positive point of contribution to UT on this forum.

                                1 Reply Last reply Reply Quote 3
                                • D Offline
                                  domubpkm
                                  last edited by 13 Oct 2022, 15:46

                                  As far as I'm concerned, .wav records from MyRec are not directly readable from this directory. If I copy this directory to the Music directory or to my SD card, I can.

                                  BollyB 1 Reply Last reply 15 Oct 2022, 09:15 Reply Quote 0
                                  • BollyB Offline
                                    Bolly @domubpkm
                                    last edited by 15 Oct 2022, 09:15

                                    @domubpkm I can read them.

                                    2015-Now (Daily use) : BQ Aquaris E4.5 Ubuntu edition
                                    2016-Now (Daily use) : BQ Aquaris M10 FHD Betatester

                                    2020-Now : PinePhone Braveheart & CE UBports
                                    2020-Now (Family/Daily use): Vollaphone Xenial
                                    2022-Now (Family/Daily use): Vollaphone 22 Focal

                                    D 1 Reply Last reply 15 Oct 2022, 09:44 Reply Quote 0
                                    • D Offline
                                      domubpkm @Bolly
                                      last edited by 15 Oct 2022, 09:44

                                      @bolly said in [How-To] Record Calls:

                                      I can read them

                                      Hello.
                                      What do you mean more specifically? What phone /channel ?

                                      BollyB 1 Reply Last reply 16 Oct 2022, 09:14 Reply Quote 0
                                      • BollyB Offline
                                        Bolly @domubpkm
                                        last edited by Bolly 16 Oct 2022, 09:14

                                        Hello @domubpkm ,

                                        • E4.5 stable channel.
                                        • Installation with the script: https://forums.ubports.com/topic/8144/how-to-record-calls/4?_=1665911281738
                                        • Open file with file explorer and preview.

                                        2015-Now (Daily use) : BQ Aquaris E4.5 Ubuntu edition
                                        2016-Now (Daily use) : BQ Aquaris M10 FHD Betatester

                                        2020-Now : PinePhone Braveheart & CE UBports
                                        2020-Now (Family/Daily use): Vollaphone Xenial
                                        2022-Now (Family/Daily use): Vollaphone 22 Focal

                                        D 1 Reply Last reply 16 Oct 2022, 09:44 Reply Quote 0
                                        • BollyB Bolly referenced this topic on 16 Oct 2022, 09:14
                                        • D Offline
                                          domubpkm @Bolly
                                          last edited by 16 Oct 2022, 09:44

                                          @bolly Exact. Preview on the line of selected wav file works but not preview on top.

                                          2022-10-16T09:37:16.255Z.png

                                          1 Reply Last reply Reply Quote 0
                                          • D Offline
                                            domubpkm
                                            last edited by domubpkm 28 Oct 2022, 14:02

                                            Hello @Br1 . I just noticed today, as it is my first try,
                                            that the sound reproduced from the recording in loudspeaker mode is not of good quality. Do you confirm it? If so, can you make the recording speakerphone compatible?

                                            Edit 10/30 : I note that recordings are named with their recording end time. Personally, it seems more logical to me that this is the start time of a recording: that's why I rename each recording with the times contained in the call log.

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post